SlideShare uma empresa Scribd logo
1 de 360
Introdução ao Oracle: SQL
                    e PL/SQL
                    Guia do Estudante • Volume 2




41010BP13
Produção 1.3
Fevereiro de 2000
M08945-BP
Autores                  Copyright © Oracle Corporation, 1998, 1999. Todos os direitos reservados e de
                         titularidade da Oracle Corporation, inclusive aqueles referentes à tradução para
Neena Kochhar            o idioma português - Brasil.
Ellen Gravina
                         Esta documentação contém informações de propriedade da Oracle Corporation.
Priya Nathan             É fornecida sob um contrato de licença que contém restrições sobre seu uso e sua
                         divulgação, sendo também protegida pela legislação de direitos autorais. Não é
                         permitida a engenharia reversa dos programas de computador. Se esta
                         documentação for entregue/distribuída a uma Agência do Departamento de Defesa
Colaboradores Técnicos   do Governo dos Estados Unidos da América do Norte, será então entregue/distribuída
                         com Direitos Restritos e a seguinte legenda será aplicável:
e Revisores
                         Legenda de Direitos Restritos
Claire Bennet
Christa Miethaner        O uso, duplicação ou divulgação por aquele Governo estão sujeitos às restrições
Tony Hickman             aplicáveis aos programas comerciais de computadores e serão considerados como
                         programas de computador com Direitos Restritos de acordo com a legislação federal
Sherin Nassa             daquele Governo, conforme descrito no subparágrafo da legislação norte-americana
Nancy Greenberg          (c) (1) (ii) de DFARS 252.227-7013, Direitos sobre Dados Técnicos e Programas de
Hazel Russell            Computador (outubro de 1988).
Kenneth Goetz
                         Proibida a reprodução total ou parcial desta documentação sem a expressa
Piet van Zon             autorização prévia por escrito da Oracle Corporation ou da Oracle do Brasil Sistemas
Ulrike Dietrich          Ltda. A cópia deste material, de qualquer forma ou por qualquer meio, eletrônico,
Helen Robertson          mecânico ou de outra natureza, inclusive através de processos xerográficos, de
Thomas Nguyen            fotocópia e de gravação, constitui violação da legislação de direitos autorais e será
                         punida civil e-ou criminalmente na forma da lei.
Lisa Jansson
Kuljit Jassar            Se esta documentação for entregue / distribuída a uma Agência do Governo dos
                         Estados Unidos da América do Norte que não esteja subordinada ao Departamento
                         de Defesa, será então entregue / distribuída com "Direitos Restritos", conforme
                         definido no FAR 52.227-14, Direitos sobre Dados - Geral, inclusive a Alternativa III
Editor                   (junho de 1987).
Jerry Brosnan            As informações contidas neste documento estão sujeitas a alterações sem aviso
                         prévio. Se você encontrar algum problema na documentação, envie a Products
                         Education - Oracle Corporation ou a Education - Oracle do Brasil Sistemas Ltda. uma
                         descrição de tal problema por escrito.

                         Education Products, Oracle Corporation, 500 Oracle Parkway, Box SB-6, Redwood
                         Shores, CA 94065.
                         Distribuidor no Brasil: Oracle do Brasil Sistemas Ltda.
                         Rua José Guerra, 127, São Paulo, SP - 04719-030 -
                         Brasil
                         CGC: 59.456.277/0001-76.

                         A Oracle Corporation e a Oracle do Brasil Sistemas Ltda. não garantem que este
                         documento esteja isento de erros.

                         Oracle e todos os demais produtos Oracle citados nesta documentação são marcas
                         comerciais ou marcas comerciais registradas da Oracle Corporation.

                         Todos os outros nomes de produtos ou de empresas aqui mencionados o são apenas
                         para fins de identificação e podem ser marcas comerciais registradas de seus
                         respectivos proprietários.
Sumário


Prefácio

Mapa de Curso

Introdução
    Objetivos I-2
    Ciclo de Vida de Desenvolvimento do Sistema I-3
    Armazenamento de Dados em Diferentes Mídias I-5
    Conceito de Banco de Dados Relacional I-6
    Definição de Banco de Dados Relacional I-7
    Modelos de Dados I-8
    Modelo de Relacionamento de Entidades I-9
    Convenções de Modelo para Relacionamento de Entidades I-11
    Terminologia de Banco de Dados Relacional I-13
    Relacionando Várias Tabelas I-15
    Propriedades de Banco de Dados Relacional I-17
    Comunicando-se com um RDBMS Usando o SQL I-18
    Sistema de Gerenciamento de Banco de Dados Relacional I-19
    Oracle8: Sistema de Gerenciamento de Banco de Dados Relacional
    de Objeto I-20
    Oracle8i: Banco de Dados de Plataforma Internet para Recursos de
    Computação na Internet I-21
    Plataforma Internet da Oracle I-23
    Instruções SQL I-24
    Sobre PL/SQL I-25
    Ambiente PL/SQL I-26
    Tabelas Usadas no Curso I-27
    Sumário I-28

1   Criando Instruções SQL Básicas
    Objetivos 1-2
    Recursos das Instruções SELECT SQL 1-3
    Instrução SELECT Básica 1-4
    Criando Instruções SQL 1-5
    Selecionando Todas as Colunas 1-6
    Selecionando Colunas Específicas 1-7
    Defaults de Cabeçalho de Coluna 1-8
    Expressões Aritméticas 1-9
    Usando Operadores Aritméticos 1-10




                                         iii
Precedência do Operador 1-11
    Usando Parênteses 1-13
    Definindo um Valor Nulo 1-14
    Valores Nulos nas Expressões Aritméticas 1-15
    Definindo um Apelido de Coluna 1-16
    Usando Apelidos de Coluna 1-17
    Operador de Concatenação 1-18
    Usando um Operador de Concatenação 1-19
    Strings Literais de Caracteres 1-20
    Usando Strings Literais de Caracteres 1-21
    Linhas Duplicadas 1-22
    Eliminando Linhas Duplicadas 1-23
    Interação SQL e SQL*Plus 1-24
    Instruções SQL Versus Comandos SQL*Plus 1-25
    Visão Geral do SQL*Plus 1-26
    Estabelecendo Login no SQL*Plus 1-27
    Exibindo a Estrutura de Tabela 1-28
    Comandos de Edição do SQL*Plus 1-30
    Comandos de Arquivo do SQL*Plus 1-32
    Sumário 1-33
    Visão Geral do Exercício 1-34

2   Restringindo e Classificando Dados
    Objetivos 2-2
    Limitando Linhas Usando uma Seleção 2-3
    Limitando Linhas Selecionadas 2-4
    Usando a Cláusula WHERE 2-5
    Strings de Caractere e Datas 2-6
    Operadores de Comparação 2-7
    Usando Operadores de Comparação 2-8
    Outros Operadores de Comparação 2-9
    Usando o Operador BETWEEN 2-10
    Usando o Operador IN 2-11
    Usando o Operador LIKE 2-12
    Usando o Operador IS NULL 2-14
    Operadores Lógicos 2-15
    Usando o Operador AND 2-16
    Usando o Operador OR 2-17
    Usando o Operador NOT 2-18
    Regras de Precedência 2-19
    Cláusula ORDER BY 2-22


                                      iv
Classificando em Ordem Decrescente 2-23
    Classificando por Apelido de Coluna 2-24
    Classificando por Várias Colunas 2-25
    Sumário 2-26
    Visão Geral do Exercício 2-27

3   Funções de Uma Única Linha
    Objetivos 3-2
    Funções SQL 3-3
    Dois Tipos de Funções SQL 3-4
    Funções de Uma Única Linha 3-5
    Funções de Caractere 3-7
    Funções de Conversão de Maiúsculas e Minúsculas 3-9
    Usando Funções de Conversão de Maiúsculas e Minúsculas 3-10
    Funções de Manipulação de Caractere 3-11
    Usando as Funções de Manipulação de Caractere 3-12
    Funções Numéricas 3-13
    Usando a Função ROUND 3-14
    Usando a Função TRUNC 3-15
    Usando a Função MOD 3-16
    Trabalhando com Datas 3-17
    Aritmética com Datas 3-18
    Usando Operadores Aritméticos com Datas 3-19
    Funções de Data 3-20
    Usando Funções de Data 3-21
    Funções de Conversão 3-23
    Conversão Implícita de Tipo de Dados 3-24
    Conversão Explícita de Tipo de Dados 3-26
    Função TO_CHAR com Datas 3-29
    Elementos de Modelo de Formato de Data 3-30
    Usando a Função TO_CHAR com Datas 3-32
    Função TO_CHAR com Números 3-33
    Usando a Função TO_CHAR com Números 3-34
    Funções TO_NUMBER e TO_DATE 3-35
    Formato de Data RR 3-36
    Função NVL 3-37
    Usando a Função NVL 3-38
    Função DECODE 3-39
    Usando a Função DECODE 3-40
    Aninhando Funções 3-42
    Sumário 3-44
    Visão Geral do Exercício 3-45
                                       v
4   Exibindo Dados de Várias Tabelas
    Objetivos 4-2
    Obtendo Dados de Várias Tabelas 4-3
    O Que É uma Junção? 4-4
    Produto Cartesiano 4-5
    Gerando um Produto Cartesiano 4-6
    Tipos de Junções 4-7
    O Que É uma Junção Idêntica? 4-8
    Recuperando Registros com Junções Idênticas 4-9
    Qualificando Nomes de Coluna Ambíguos 4-10
    Condições de Pesquisa Adicional Usando o Operador AND   4-11
    Usando Apelidos de Tabela 4-12
    Unindo Mais de Duas Tabelas 4-13
    Junções Não-idênticas 4-14
    Recuperando Registros com Junções Não-idênticas 4-15
    Junções Externas 4-16
    Usando Junções Externas 4-18
    Autojunções 4-19
    Unindo uma Tabela a Ela Mesma 4-20
    Sumário 4-21
    Visão Geral do Exercício 4-22

5   Agregando Dados Usando Funções de Grupo
    Objetivos 5-2
    O Que São Funções de Grupo? 5-3
    Tipos de Funções de Grupo 5-4
    Usando Funções de Grupo 5-5
    Usando Funções AVG e SUM 5-6
    Usando Funções MIN e MAX 5-7
    Usando a Função COUNT 5-8
    Funções de Grupo e Valores Nulos 5-10
    Usando a Função NVL com Funções de Grupo 5-11
    Criando Grupos de Dados 5-12
    Criando Grupos de Dados: Cláusula GROUP BY 5-13
    Usando a Cláusula GROUP BY 5-14
    Agrupando por Mais de Uma Coluna 5-16
    Usando a Cláusula GROUP BY em Várias Colunas 5-17
    Consultas Ilegais Usando Funções de Grupo 5-18
    Excluindo Resultados do Grupo 5-20
    Excluindo Resultados do Grupo: Cláusula HAVING 5-21
    Usando a Cláusula HAVING 5-22


                                       vi
Aninhando Funções de Grupo 5-24
    Sumário 5-25
    Visão Geral do Exercício 5-26

6   Subconsultas
    Objetivos 6-2
    Usando uma Subconsulta para Resolver um Problema 6-3
    Subconsultas 6-4
    Usando uma Subconsulta 6-5
    Diretrizes para o Uso de Subconsultas 6-6
    Tipos de Subconsultas 6-7
    Subconsultas de uma Única Linha 6-8
    Executando Subconsultas de uma Única Linha 6-9
    Usando Funções de Grupo em uma Subconsulta 6-10
    Cláusula HAVING com Subconsultas 6-11
    O Que Há de Errado com esta Instrução? 6-12
    Esta Instrução Irá Funcionar? 6-13
    Subconsultas de Várias Linhas 6-14
    Usando o Operador ANY em Subconsultas de Várias Linhas 6-15
    Usando o Operador ALL em Subconsultas de Várias Linhas 6-16
    Sumário 6-17
    Visão Geral do Exercício 6-18

7   Subconsultas de Várias Colunas
    Objetivos 7-2
    Subconsultas de Várias Colunas 7-3
    Usando Subconsultas de Várias Colunas 7-4
    Comparações de Coluna 7-6
    Subconsulta de Comparação que Não Seja aos Pares 7-7
    Subconsulta que Não Seja aos Pares 7-8
    Valores Nulos em uma Subconsulta 7-9
    Usando uma Subconsulta na Cláusula FROM 7-10
    Sumário 7-11
    Visão Geral do Exercício 7-12

8   Produzindo uma Saída Legível com o SQL*Plus
    Objetivos 8-2
    Relatórios Interativos 8-3
    Variáveis de Substituição 8-4
    Usando a Variável de Substituição & 8-5
    Usando o Comando SET VERIFY 8-6
    Valores de Caractere e Data com Variáveis de Substituição 8-7


                                         vii
Especificando Nomes de Coluna, Expressões e Texto no Tempo de Execução 8-8
    Usando a Variável de Substituição && 8-10
    Definindo as Variáveis de Usuário 8-11
    O Comando ACCEPT 8-12
    Usando o Comando ACCEPT 8-13
    Comandos DEFINE e UNDEFINE 8-14
    Usando o Comando DEFINE 8-15
    Personalizando o Ambiente SQL*Plus 8-16
    Variáveis do Comando SET 8-17
    Salvando as Personalizações no Arquivo login.sql 8-18
    Comandos de Formato do SQL*Plus 8-19
    O Comando COLUMN 8-20
    Usando o Comando COLUMN 8-21
    Modelos de Formato COLUMN 8-22
    Usando o Comando BREAK 8-23
    Usando os Comandos TTITLE e BTITLE 8-24
    Criando um Arquivo de Script para Executar um Relatório 8-25
    Exemplo de Relatório 8-27
    Sumário 8-28
    Visão Geral do Exercício 8-29

9   Manipulação de Dados
    Objetivos 9-2
    DML (Data Manipulation Language) 9-3
    Adicionando uma Nova Linha em uma Tabela 9-4
    A Instrução INSERT 9-5
    Inserindo Novas Linhas 9-6
    Inserindo Linhas com Valores Nulos 9-7
    Inserindo Valores Especiais 9-8
    Inserindo Valores Espec'ificos de Data 9-9
    Inserindo Valores Usando Variáveis de Substituição 9-10
    Criando um Script com Prompts Personalizados 9-11
    Copiando Linhas a partir de Outra Tabela 9-12
    Alterando os Dados em uma Tabela 9-13
    A Instrução UPDATE 9-14
    Atualizando Linhas em uma Tabela 9-15
    Atualizando com Subconsulta de Várias Colunas 9-16
    Atualizando Linhas Baseadas em Outra Tabela 9-17
    Atualizando Linhas: Erro de Restrição de Integridade 9-18
    Removendo uma Linha de uma Tabela 9-19
    A Instrução DELETE 9-20


                                          viii
Deletando Linhas de uma Tabela 9-21
   Deletando Linhas Baseadas em Outra Tabela 9-22
   Deletando Linhas: Erro de Restrição de Integridade 9-23
   Transações de Banco de Dados 9-24
   Vantagens das Instruções COMMIT e ROLLBACK 9-26
   Controlando Transações 9-27
   Processando Transações Implícitas 9-28
   Estado dos Dados Antes do COMMIT ou ROLLBACK 9-29
   Estado dos Dados Após COMMIT 9-30
   Submetendo Dados a Commit 9-31
   Estado dos Dados Após ROLLBACK 9-32
   Fazendo Roll Back de Alterações para um Marcador 9-33
   Rollback no Nível da Instrução 9-34
   Consistência na Leitura 9-35
   Implementação da Consistência na Leitura 9-36
   Bloqueando 9-37
   Sumário 9-38
   Visão Geral do Exercício 9-39

10 Criando e Gerenciando Tabelas
   Objetivos 10-2
   Objetos do Banco de Dados 10-3
   Convenções para Nomeação 10-4
   A Instrução CREATE TABLE 10-5
   Fazendo Referência a Tabelas de Outro Usuário 10-6
   A Opção DEFAULT 10-7
   Criando Tabelas 10-8
   Tabelas no Banco de Dados Oracle 10-9
   Consultando o Dicionário de Dados 10-10
   Tipos de Dados 10-11
   Criando uma Tabela Usando uma Subconsulta 10-13
   A Instrução ALTER TABLE 10-15
   Adicionando uma Coluna 10-16
   Modificando uma Coluna 10-18
   Eliminando uma Coluna 10-19
   Opção SET UNUSED 10-20
   Eliminando uma Tabela 10-22
   Alterando o Nome de um Objeto 10-23
   Truncando uma Tabela 10-24
   Adicionando Comentários a uma Tabela 10-25
   Sumário 10-26
   Visão Geral do Exercício 10-27
                                       ix
11 Incluindo Restrições
   Objetivos 11-2
   O Que São Restrições? 11-3
   Diretrizes sobre Restrições 11-4
   Definindo Restrições 11-5
   A Restrição NOT NULL 11-7
   A Restrição UNIQUE KEY 11-9
   A Restrição PRIMARY KEY 11-11
   A Restrição FOREIGN KEY 11-13
   Palavras-chave da Restrição FOREIGN KEY 11-15
   A Restrição CHECK 11-16
   Adicionando uma Restrição 11-17
   Eliminando uma Restrição 11-19
   Desativando Restrições 11-20
   Ativando Restrições 11-21
   Restrições em Cascata 11-22
   Verificando Restrições 11-24
   Verificando Colunas Associadas com Restrições 11-25
   Sumário 11-26
   Visão Geral do Exercício 11-27

12 Criando Views
   Objetivos 12-2
   Objetos de Banco de Dados 12-4
   O Que É uma View? 12-5
   Por Que Usar Views? 12-6
   Views Simples e Views Complexas 12-7
   Criando uma View 12-8
   Recuperando Dados de uma View 12-11
   Consultando uma View 12-12
   Modificando uma View 12-13
   Criando uma View Complexa 12-14
   Regras para Executar Operações DML em uma View 12-15
   Usando a Cláusula WITH CHECK OPTION 12-17
   Negando Operações DML 12-18
   Removendo uma View 12-19
   Views Em Linha 12-20
   Análise "Top-N” 12-21
   Executando a Análise “Top-N” 12-22
   Exemplo de Análise “Top-N” 12-23
   Sumário 12-24
   Visão Geral do Exercício 12-26
                                       x
13 Outros Objetos do Banco de Dados
   Objetivos 13-2
   Objetos do Banco de Dados 13-3
   O Que É uma Seqüência? 13-4
   A Instrução CREATE SEQUENCE 13-5
   Criando uma Seqüência 13-7
   Confirmando Seqüências 13-8
   Pseudocolunas NEXTVAL e CURRVAL 13-9
   Usando uma Seqüência 13-11
   Modificando uma Seqüência 13-13
   Diretrizes para Modificar uma Seqüência 13-14
   Removendo uma Seqüência 13-15
   O Que É um Índice? 13-16
   Como os Índices são Criados? 13-17
   Criando um Índice 13-18
   Quando Criar um Índice 13-19
   Quando Não Criar um Índice 13-20
   Confirmando Índices 13-21
   Índices Baseados em Função 13-22
   Removendo um Índice 13-23
   Sinônimos 13-24
   Criando e Removendo Sinônimos 13-25
   Sumário 13-26
   Visão Geral do Exercício 13-27

14 Controlando o Acesso do Usuário
   Objetivos 14-2
   Controlando o Acesso do Usuário 14-3
   Privilégios 14-4
   Privilégios de Sistema 14-5
   Criando Usuários 14-6
   Privilégios de Sistema de Usuário 14-7
   Concedendo Privilégios de Sistema 14-8
   O Que É uma Função? 14-9
   Criando e Concedendo Privilégios a uma Função 14-10
   Alterando Sua Senha 14-11
   Privilégios de Objeto 14-12
   Concedendo Privilégios de Objeto 14-14
   Usando as Palavras-chave WITH GRANT OPTION e PUBLIC 14-15
   Confirmando Privilégios Concedidos 14-16
   Como Revogar Privilégios de Objeto 14-17



                                        xi
Revogando Privilégios de Objeto 14-18
   Sumário 14-19
   Visão Geral do Exercício 14-20

15 SQL Workshop
   Visão Geral do Workshop 15-2

16 Declarando Variáveis
   Objetivos 16-2
   Sobre PL/SQL 16-3
   Benefícios da Linguagem PL/SQL 16-4
   Estrutura de Bloco PL/SQL 16-6
   Tipos de Bloco 16-8
   Construções de Programa 16-9
   Uso de Variáveis 16-11
   Tratando Variáveis em PL/SQL 16-12
   Tipos de Variáveis 16-13
   Declarando Variáveis PL/SQL 16-16
   Regras para Nomeação 16-18
   Atribuindo Valores às Variáveis 16-19
   Palavras-chave e Inicialização de Variáveis 16-20
   Tipos de Dados Escalares 16-22
   Tipos de Dados Escalares Básicos 16-23
   Declarando Variáveis Escalares 16-25
   O Atributo %TYPE 16-26
   Declarando Variáveis com o Atributo %TYPE 16-27
   Declarando Variáveis Booleanas 16-28
   Estrutura de Registro PL/SQL 16-29
   Variáveis de Tipo de Dados LOB 16-30
   Variáveis de Ligação 16-31
   Referenciando Variáveis Não-PL/SQL 16-33
   DBMS_OUTPUT.PUT_LINE 16-34
   Sumário 16-35
   Visão Geral do Exercício 16-37

17 Criando Instruções Executáveis
   Objetivos 17-2
   Diretrizes e Sintaxe de Bloco PL/SQL 17-3
   Comentando Código 17-6
   Funções SQL em PL/SQL 17-7
   Funções PL/SQL 17-8
   Conversão de Tipo de Dados 17-9


                                        xii
Blocos Aninhados e Escopo de Variável 17-11
   Operadores em PL/SQL 17-14
   Usando Variáveis de Ligação 17-16
   Diretrizes de Programação 17-17
   Convenções para Nomeação de Código 17-18
   Endentando o Código 17-19
   Determinando o Escopo da Variável 17-20
   Sumário 17-21
   Visão Geral do Exercício 17-22

18 Interagindo com o Oracle Server
   Objetivos 18-2
   Instruções SQL em PL/SQL 18-3
   Instruções SELECT em PL/SQL 18-4
   Recuperando Dados em PL/SQL 18-6
   Manipulando Dados Usando o PL/SQL 18-8
   Inserindo Dados 18-9
   Atualizando Dados 18-10
   Deletando Dados 18-11
   Convenções para Nomeação 18-12
   Instruções COMMIT e ROLLBACK 18-14
   Cursor SQL 18-15
   Atributos do Cursor SQL 18-16
   Sumário 18-18
   Visão Geral do Exercício 18-20

19 Criando Estruturas para Controle
   Objetivos 19-2
   Controlando o Fluxo de Execução PL/SQL 19-3
   Instruções IF 19-4
   Instruções IF Simples 19-5
   Fluxo de Execução da Instrução IF-THEN-ELSE 19-6
   Instruções IF-THEN-ELSE 19-7
   Fluxo de Execução da Instrução IF-THEN-ELSIF 19-8
   Instruções IF-THEN-ELSIF 19-9
   Elaborando Condições Lógicas 19-10
   Tabelas Lógicas 19-11
   Condições Booleanas 19-12
   Controle Iterativo: Instruções LOOP 19-13
   Loop Básico 19-14
   Loop FOR 19-16


                                      xiii
Loop WHILE 19-19
   Loops e Labels Alinhados 19-21
   Sumário 19-23
   Visão Geral do Exercício 19-24

20 Trabalhando com Tipos de Dados Compostos
   Objetivos 20-2
   Tipos de Dados Compostos 20-3
   Registros PL/SQL 20-4
   Criando um Registro PL/SQL 20-5
   Estrutura de Registro PL/SQL 20-7
   O Atributo %ROWTYPE 20-8
   Vantagens de Usar %ROWTYPE 20-9
   O Atributo %ROWTYPE 20-10
   Tabelas PL/SQL 20-11
   Criando uma Tabela PL/SQL 20-12
   Estrutura de Tabela PL/SQL 20-13
   Criando uma Tabela PL/SQL 20-14
   Usando Métodos de Tabela PL/SQL 20-15
   Tabela de Registros PL/SQL 20-16
   Exemplo de Tabela de Registros PL/SQL 20-17
   Sumário 20-18
   Visão Geral do Exercício 20-19

21 Criando Cursores Explícitos
   Objetivos 21-2
   Sobre os Cursores 21-3
   Funções do Cursor Explícito 21-4
   Controlando Cursores Explícitos 21-5
   Declarando o Cursor 21-7
   Abrindo o Cursor 21-9
   Extraindo Dados do Cursor 21-11
   Fechando o Cursor 21-13
   Atributos do Cursor Explícito 21-14
   Controlando Várias Extrações 21-15
   O Atributo %ISOPEN 21-16
   Os Atributos %NOTFOUND e %ROWCOUNT 21-17
   Cursores e Registros 21-19
   Loops FOR de Cursor 21-20
   Loops FOR do Cursor Usando Subconsultas 21-22
   Sumário 21-23
   Visão Geral do Exercício 21-25

                                     xiv
22 Conceitos de Cursor Explícito Avançados
   Objetivos 22-2
   Cursores com Parâmetros 22-3
   A Cláusula FOR UPDATE 22-5
   A Cláusula WHERE CURRENT OF 22-7
   Cursores com Subconsultas 22-9
   Sumário 22-10
   Visão Geral do Exercício 22-11

23 Tratando Exceções
   Objetivos 23-2
   Tratando Exceções com Código PL/SQL 23-3
   Tratando Exceções 23-4
   Tipos de Exceção 23-5
   Capturando Exceções 23-6
   Diretrizes para a Captura de Exceções 23-7
   Capturando Erros Predefinidos do Oracle Server 23-8
   Exceção Predefinida 23-10
   Capturando Erros Não Predefinidos do Oracle Server 23-11
   Erro Não Predefinido 23-12
   Funções para Captura de Exceções 23-13
   Capturando Exceções Definidas pelo Usuário 23-15
   Exceção Definida pelo Usuário 23-16
   Ambientes de Chamada 23-17
   Propagando Exceções 23-18
   Procedimento RAISE_APPLICATION_ERROR 23-19
   Sumário 23-21
   Visão Geral do Exercício 23-22

A Soluções de Exercícios

B Descrições da Tabela e Dados

   Índice




                                       xv
xvi
14
         Controlando o
       Acesso do Usuário




Copyright  Oracle Corporation, 1999. Todos os direitos reservados.
Objetivos

         Depois de completar esta lição, você poderá
         fazer o seguinte:
          • Criar usuários
          • Criar funções para facilitar a configuração
            e manutenção do modelo de segurança
          • Usar as instruções GRANT e REVOKE para
            conceder e revogar os privilégios de objeto




         14-2     Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Objetivo da Lição
 Nesta lição, você aprenderá como controlar o acesso de banco de dados a objetos específicos e
 adicionar novos usuários com diferentes níveis de privilégio de acesso.




                            Introdução ao Oracle: SQL e PL/SQL 14-2
Controlando o Acesso do Usuário

                Administrador
                do banco de dados




                         Privilégios
                     de usuário e senha

                 Usuários




         14-3      Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Controlando o Acesso do Usuário
 Em um ambiente de vários usuários, você deseja manter a segurança de acesso e de uso do banco de
 dados. Com a segurança de banco de dados do Oracle Server, você pode:
   •   Controlar o acesso ao banco de dados
   •   Conceder acesso a objetos específicos no banco de dados
   •   Confirmar privilégios concedidos e recebidos com o dicionário de dados Oracle
   •   Criar sinônimos para os objetos de banco de dados
 A segurança de banco de dados pode ser classificada em duas categorias: segurança de sistema e
 segurança de banco de dados. A segurança de sistema cobre o acesso e o uso do banco de dados no
 nível de sistema como, por exemplo, nome de usuário e senha, espaço em disco alocado aos usuários
 e operações do sistema permitidas pelo usuário. A segurança de banco de dados cobre o acesso e o
 uso dos objetos de banco de dados e as ações que esses usuários possam ter sobre os objetos.




                             Introdução ao Oracle: SQL e PL/SQL 14-3
Privilégios
           • Segurança de banco de dados:
              – Segurança de sistema
              – Segurança de dados
           • Privilégios de sistema: Obter acesso ao
             banco de dados
           • Privilégios de objeto: Manipular o
             conteúdo dos objetos de banco de dados
           • Esquema: Coleção de objetos como, por
             exemplo, tabelas, views e seqüências


         14-4      Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Privilégios
 Os privilégios constituem o direito de executar instruções SQL particulares. O administrador de
 banco de dados é um usuário de alto nível com a habilidade de conceder aos usuários acesso ao banco
 de dados e aos objetos. Os usuários requerem privilégios de sistema para obter acesso aos privilégios
 de objeto e de banco de dados para manipular o conteúdo dos objetos no banco de dados. Também
 pode ser fornecido aos usuários o privilégio de conceder privilégios adicionais a outros usuários ou a
 funções, que são grupos nomeados de privilégios relacionados.
Esquema
 Um esquema é uma coleção de objetos como, por exemplo, tabelas, views e seqüências. O esquema
 pertence a um usuário de banco de dados e tem o mesmo nome do usuário.
 Para obter mais informações, consulte o Oracle Server Application Developer’s Guide, Release 8,
 seção "Establishing a Security Policy" e Oracle Server Concepts Manual, Release 8, tópico
 "Database Security".




                             Introdução ao Oracle: SQL e PL/SQL 14-4
Privilégios de Sistema

          • Mais de 80 privilégios estão disponíveis.
          • O DBA possui privilégios de sistema de
            alto nível:
             – Criar novos usuários
             – Remover usuários
             – Remover tabelas
             – Fazer back up de tabelas




         14-5      Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Privilégios de Sistema
 Mais de 80 privilégios estão disponíveis para usuários e funções. Os privilégios de sistema são
 tipicamente fornecidos pelo administrador do banco de dados.
Privilégios de DBA Típicos
  Privilégio de Sistema               Operações Autorizadas
  CREATE USER                         Permite que o cedente crie outros usuários Oracle
                                      (um privilégio requerido para uma função DBA)
  DROP USER                           Elimina um outro usuário
  DROP ANY TABLE                      Elimina uma tabela em qualquer esquema
  BACKUP ANY TABLE                    Faz back up de tabela nos esquemas com o utilitário de
                                      exportação




                             Introdução ao Oracle: SQL e PL/SQL 14-5
Criando Usuários

         O DBA cria usuários usando a instrução
         CREATE USER.

          CREATE     USER usuário
          IDENTIFIED BY   senha;



          SQL> CREATE    USER scott
            2 IDENTIFIED BY   tiger;
          User created.




         14-6      Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Criando um Usuário
 O DBA cria o usuário executando a instrução CREATE USER. O usuário não possui privilégios
 nesse ponto. O DBA pode então conceder um número de privilégios àquele usuário. Esses privilégios
 determinam o que o usuário pode fazer no nível de banco de dados.
 O slide fornece a sintaxe resumida para criar um usuário.
 Na sintaxe:
       usuário               é o nome do usuário a ser criado

       senha              especifica que o usuário deve estabelecer login com essa senha
 Para obter mais informações, consulte o Oracle Server SQL Reference, Release 8, "GRANT"
 (System Privileges and Roles) e "CREATE USER".




                             Introdução ao Oracle: SQL e PL/SQL 14-6
Privilégios de Sistema de Usuário
           • Quando o usuário for criado, o DBA poderá
             conceder privilégios de sistema específicos
             para ele.
          GRANT privilégio [, privilégio...]
          TO usuário [, usuário...];

           • Um desenvolvedor de aplicação pode ter os
             seguintes privilégios de sistema:
              – CREATE SESSION
              – CREATE TABLE
              – CREATE SEQUENCE
              – CREATE VIEW
              – CREATE PROCEDURE
         14-7      Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Privilégios Típicos de Usuário
 Agora que o DBA criou um usuário, o DBA poder atribuir privilégios àquele usuário.
  Privilégio de Sistema            Operações Autorizadas
  CREATE SESSION                   Conectar-se ao banco de dados
  CREATE TABLE                     Criar tabelas no esquema do usuário
  CREATE SEQUENCE                  Criar uma seqüência no esquema do usuário
  CREATE VIEW                      Criar uma view no esquema do usuário
  CREATE PROCEDURE                 Criar um função, pacote ou procedimento armazenado no
                                   esquema do usuário


 Na sintaxe:
      privilégio             é o privilégio de sistema a ser concedido
      usuário                é o nome do usuário




                             Introdução ao Oracle: SQL e PL/SQL 14-7
Concedendo
                          Privilégios de Sistema

         O DBA pode conceder privilégios de sistema
         específicos a um usuário.
         SQL> GRANT create table, create sequence, create view
           2 TO      scott;
         Grant succeeded.




         14-8      Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Concedendo Privilégios de Sistema
 O DBA usa a instrução GRANT para alocar os privilégios de sistema para o usuário. Quando forem
 concedidos privilégios ao usuário, ele pode usá-los imediatamente.
 No exemplo do slide, foram atribuídos privilégios ao usuário Scott para criar tabelas, seqüências e
 views.




                             Introdução ao Oracle: SQL e PL/SQL 14-8
O Que É uma Função?


                                                         Usuários



                                                                                         Gerenciador



                                                         Privilégios

                  Alocando privilégios                                            Alocando privilégios
                    sem uma função                                                  com uma função




           14-9        Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




O Que É uma Função?
 Uma função é um grupo nomeado de privilégios relacionados que podem ser concedidos ao usuário.
 Isso faz com que a concessão e revogação de privilégios se torne mais fácil de desempenhar e manter.
 Um usuário pode ter acesso a várias funções e vários usuários podem ter a mesma função atribuída a
 eles. As funções são criadas tipicamente para uma aplicação de banco de dados.
Criando e Atribuindo uma Função
 Primeiro, o DBA deve criar uma função. O DBA pode então atribuir privilégios e usuários às funções.
 Sintaxe
  CREATE           ROLE      função;
 onde:            função                  é o nome da função a ser criada
 Agora que a função foi criada, o DBA pode usar a instrução GRANT para atribuir usuários às funções
 e privilégios à função.




                                 Introdução ao Oracle: SQL e PL/SQL 14-9
Criando e Concedendo
                     Privilégios a uma Função

          SQL> CREATE ROLE manager;
          Role created.


          SQL> GRANT create table, create view
            2        to manager;
          Grant succeeded.


          SQL> GRANT manager to BLAKE, CLARK;
          Grant succeeded.




         14-10     Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Criando uma Função
 O exemplo no slide cria um gerente de função e permite que os gerentes criem tabelas e views.
 Ele atribui então a função de gerentes a Blake e a Clark. Agora Blake e Clark podem criar tabelas
 e views.




                             Introdução ao Oracle: SQL e PL/SQL 14-10
Alterando Sua Senha

            • O DBA cria a sua conta de usuário e
              inicializa a sua senha.
            • Você pode alterar sua senha usando a
              instrução ALTER USER.

            SQL> ALTER USER scott
              2        IDENTIFIED BY lion;
            User altered.




           14-11    Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Alterando Sua Senha
 O DBA cria uma conta de usuário e inicializa uma senha para cada usuário. Você pode alterar sua
 senha usando a instrução ALTER USER.
 Sintaxe
  ALTER USER usuário IDENTIFIED BY senha;
 onde:         usuário                 é o nome do usuário
               senha                    especifica a nova senha
 Embora essa instrução possa ser usada para alterar a senha, há várias outras opções. Você deve ter o
 privilégio ALTER USER para alterar uma opção.
 Para obter mais informações, consulte o Oracle Server SQL Reference, Release 8, "ALTER USER".




                              Introdução ao Oracle: SQL e PL/SQL 14-11
Privilégios de Objeto
             Privilégio
             de Objeto                  Tabela        View         Seqüência             Procedimento
             ALTER                         √                            √
             DELETE                        √              √
             EXECUTE                                                                       √
             INDEX                          √
             INSERT                         √             √
             REFERENCES                     √
             SELECT                         √             √             √
             UPDATE                         √             √



         14-12     Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Privilégios de Objeto
 Um privilégio de objeto é um privilégio ou direito de desempenhar uma determinada ação em uma
 tabela, view, seqüência ou procedimento específico. Cada objeto tem um conjunto determinado de
 privilégios concedíveis. A tabela no slide lista os privilégios de vários objetos. Observe que apenas
 os privilégios que se aplicam a uma seqüência são SELECT e ALTER. UPDATE, REFERENCES
 e INSERT podem ser restringidos especificando-se um subconjunto das colunas atualizáveis. Um
 privilégio SELECT pode ser restringido criando uma view com um subconjunto de colunas e
 concedendo o privilégio SELECT na view. Uma concessão em um sinônimo é convertida para uma
 concessão na tabela base referenciada pelo sinônimo.




                             Introdução ao Oracle: SQL e PL/SQL 14-12
Privilégios de Objeto

          • Os privilégios de objeto variam de objeto para
            objeto.
          • Um proprietário tem todos os privilégios
            sobre o objeto.
          • Um proprietário pode fornecer privilégios
            específicos sobre o objeto de proprietário.
             GRANT                object_priv [(colunas)]
             ON                   objeto
             TO                   {usuário|função|PUBLIC}
             [WITH GRANT          OPTION];




         14-13      Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Concedendo Privilégios de Objeto
 Privilégios de objeto diferentes estão disponíveis para tipos diferentes de objetos de esquema. Um
 usuário tem automaticamente todos os privilégios de objeto para objetos de esquema contidos no
 esquema do usuário. Um usuário pode conceder qualquer privilégio de objeto sobre qualquer objeto
 de esquema que o usuário possua para qualquer outro usuário ou função. Se a concessão incluir a
 instrução GRANT OPTION, o cedente pode reconceder o privilégio de objeto para outros usuários;
 senão, o cedente pode usar o privilégio, mas não pode concedê-lo a outros usuários.
 Na sintaxe:
      object_priv                          é um privilégio de objeto a ser concedido
       ALL                                 especifica todos os privilégios de objeto.
       colunas                             especifica a coluna de uma tabela ou view sobre as quais os
                                           privilégios são concedidos
       ON objeto                           é o objeto sobre o qual os privilégios são concedidos
       TO                                  identifica a quem o privilégio é concedido
       PUBLIC                              concede privilégios de objeto a todos os usuários
       WITH GRANT OPTION                   permite que o cedente conceda privilégios de objeto a outros
                                           usuários e funções

                              Introdução ao Oracle: SQL e PL/SQL 14-13
Concedendo Privilégios de Objeto
             • Concede privilégios de consulta na
               tabela EMP.
             SQL> GRANT   select
               2 ON       emp
               3 TO       sue, rich;
             Grant succeeded.


             • Concede privilégios para atualizar colunas
               específicas aos usuários e funções.
             SQL> GRANT   update (dname, loc)
               2 ON       dept
               3 TO       scott, manager;
             Grant succeeded.


         14-14     Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Diretrizes
   •   Para conceder privilégios sobre um objeto, ele deve estar no seu próprio esquema ou você deve
       ter recebido os privilégios de objeto WITH GRANT OPTION.
   •   Um proprietário de objeto pode conceder qualquer privilégio de objeto sobre o objeto para
       qualquer outro usuário ou função do banco de dados.
   •   O proprietário de um objeto adquire automaticamente todos os privilégios de objeto sobre aquele
       objeto.
 O primeiro exemplo no slide concede aos usuários Sue e Rich o privilégio de consultar a tabela EMP.
 O segundo exemplo concede privilégios UPDATE sobre colunas específicas na tabela DEPT a Scott e
 à função de gerente.
 Se Sue ou Rich tiverem que selecionar dados da tabela emp, a sintaxe que eles terão de usar é:
       SQL> SELECT *
         2 FROM scott.emp;
 Outra alternativa é criar um sinônimo para a tabela e selecionar no sinônimo.
     SQL> CREATE SYNONYM emp FOR scott.emp
     SQL> SELECT * FROM emp;
 Observação: Os DBAs geralmente alocam privilégios de sistema e qualquer usuário que possua um
 objeto pode conceder privilégios de objeto.



                             Introdução ao Oracle: SQL e PL/SQL 14-14
Usando palavras chave WITH
                   GRANT OPTION e PUBLIC
             • Dar autoridade a um usuário para passar
               os privilégios.
          SQL> GRANT   select, insert
            2 ON       dept
            3 TO       scott
            4 WITH GRANT OPTION;
          Grant succeeded.

                 • Permitir que todos os usuários no sistema
                   consultem dados na tabela DEPT de Alice.
          SQL> GRANT   select
            2 ON       alice.dept
            3 TO       PUBLIC;
          Grant succeeded.
         14-15     Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Palavra-chave WITH GRANT OPTION
 Um privilégio que é concedido WITH GRANT OPTION pode ser passado para outros usuários e
 funções pelo cedente. Os privilégios de objeto que foram concedidos WITH GRANT OPTION são
 revogados quando o privilégio do concessor for revogado.
 O exemplo no slide dá ao usuário Scott acesso à sua tabela DEPT com o privilégio de consultar a
 tabela e adicionar linhas a ela. O exemplo também permite que Scott conceda esse privilégio a outros.
Palavra-chave PUBLIC
 O proprietário de uma tabela pode conceder acesso a todos os usuários usando a palavra-chave
 PUBLIC.
 O segundo exemplo permite que todos os usuários no sistema consultem dados na tabela DEPT de
 Alice.




                             Introdução ao Oracle: SQL e PL/SQL 14-15
Confirmando Privilégios Concedidos
       Tabela de Dicionário de Dados                 Descrição
       ROLE_SYS_PRIVS                                Privilégios de sistema concedidos
                                                     a funções
       ROLE_TAB_PRIVS                                Privilégios de tabela concedidos
                                                     a funções
       USER_ROLE_PRIVS                               Funções acessíveis ao usuário
       USER_TAB_PRIVS_MADE                           Os privilégios de objeto concedidos
                                                     aos objetos do usuário
       USER_TAB_PRIVS_RECD                           Os privilégios de objeto concedidos
                                                     ao usuário
       USER_COL_PRIVS_MADE                           Os privilégios de objeto concedidos às
                                                     colunas dos objetos do usuário
       USER_COL_PRIVS_RECD                           Os privilégios de objeto concedidos ao
                                                     usuário em colunas específicas


         14-16    Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Confirmando Privilégios Concedidos
 Se você tentar executar uma operação não autorizada — por exemplo, deletar uma linha de uma
 tabela para a qual você não tem o privilégio DELETE — o Oracle Server não permitirá que a
 operação ocorra.
 Se você receber a mensagem de erro "tabela ou view não existe" ( "table or view does not exist" do
 Oracle Server, você poderá ter:
   •   Nomeado uma tabela ou view que não existe
   •   Tentado executar uma operação em uma tabela ou view para a qual você não tem o privilégio
       apropriado
 Você pode acessar os dicionários de dados para ver os privilégios que você tem. A tabela no slide
 descreve várias tabelas de dicionários de dados.




                            Introdução ao Oracle: SQL e PL/SQL 14-16
Como Revogar Privilégios de Objeto

           • Use a instrução REVOKE para revogar os
             privilégios concedidos a outros usuários.
           • Os privilégios concedidos a outros
             usuários por WITH GRANT OPTION
             também serão revogados.

          REVOKE {privilégio [, privilégio...]|ALL}
          ON     objeto
          FROM   {usuário[, usuário...]|função|PUBLIC}
          [CASCADE CONSTRAINTS];




         14-17    Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Revogando Privilégios de Objeto
 A remoção de privilégios concedidos a outros usuários usando a instrução REVOKE. Quando você
 usa a instrução REVOKE, os privilégios que você especificar são revogados dos usuários que você
 nomear e dos outros usuários para quem esses privilégios foram concedidos pela cláusula WITH
 GRANT OPTION.
 Na sintaxe:
     CASCADE                é obrigatório para remover quaisquer restrições de integridade feitas ao
     CONSTRAINTS            objeto por meio do privilégio REFERENCES
 Para obter mais informações, consulte o Oracle Server SQL Reference, Release 8, "REVOKE".




                            Introdução ao Oracle: SQL e PL/SQL 14-17
Revogando Privilégios de Objeto

           Assim como a usuária Alice, revogue os
           privilégios SELECT e INSERT fornecidos ao
           usuário Scott na tabela DEPT.

          SQL> REVOKE select, insert
            2 ON       dept
            3 FROM     scott;
          Revoke succeeded.




         14-18    Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Revogando Privilégios de Objeto (continuação)
 O exemplo no slide revoga os privilégios SELECT e INSERT concedidos ao usuário Scott na tabela
 DEPT.
 Observação: Se um usuário obtiver o privilégio WITH GRANT OPTION, ele também poderá
 conceder o privilégio WITH GRANT OPTION para que uma longa corrente de cedentes seja
 possível, mas não são permitidas concessões circulares. Se um proprietário revogar um privilégio de
 um usuário que concedeu o mesmo privilégio a outros usuários, a instrução REVOKE se aplicará
 também aos outros usuários.
 Por exemplo, se um usuário A concede o privilégio SELECT em uma tabela ao usuário B incluindo
 WITH GRANT OPTION, o usuário B pode conceder ao usuário C o privilégio SELECT chamado
 WITH GRANT OPTION e o usuário C pode conceder ao usuário D o privilégio SELECT. Se o
 usuário A revoga o privilégio do usuário B, esse mesmo privilégio, concedido aos usuários C e D,
 são revogados.




                            Introdução ao Oracle: SQL e PL/SQL 14-18
Sumário
       Instrução                    Ação
       CREATE USER                  Permite que o DBA crie um usuário
       GRANT                        Permite que o usuário conceda a outros
                                    usuários privilégios para acessar os objetos
                                    do usuário
       CREATE ROLE                  Permite que o DBA crie um conjunto
                                    de privilégios
       ALTER USER                   Permite que os usuários alterem as suas
                                    senhas
       REVOKE                       Remove os privilégios sobre um objeto dos
                                    usuários



          14-19   Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Sumário
 Os DBAs estabelecem segurança de banco de dados inicial para usuários atribuindo privilégios aos
 outros usuários.
   •   O DBA cria usuários que devem ter uma senha. O DBA também é responsável por estabelecer
       os privilégios de sistema iniciais dos usuários.
   •   Quando o usuário tiver criado um objeto, o usuário pode passar quaisquer privilégios de objeto
       disponíveis a outros usuários ou para todos os usuários usando a instrução GRANT.
   •   Um DBA pode criar funções usando a instrução CREATE ROLE para passar um conjunto de
       privilégios de sistema ou de objeto a vários usuários. As funções tornam a concessão e a
       revogação de privilégios mais fáceis de manter.
   •   Os usuários podem alterar sua senha usando a instrução ALTER USER.
   •   Você pode remover privilégios de usuários usando a instrução REVOKE.
   •   As views do dicionário de dados permitem que os usuários vejam os privilégios concedidos a
       eles e aqueles que são concedidos sobre os seus objetos.




                            Introdução ao Oracle: SQL e PL/SQL 14-19
Visão Geral do Exercício

          • Concedendo a outros usuários privilégios
            sobre sua tabela
          • Modificando a tabela de um outro usuário
            através de privilégios concedidos a você
          • Criando um sinônimo
          • Consultando as views do dicionário de
            dados relacionados aos privilégios




         14-20     Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Visão Geral do Exercício
 Junte-se a outros alunos para este exercício de controle de acesso aos objetos de banco de dados.




                            Introdução ao Oracle: SQL e PL/SQL 14-20
Exercício 14
   1. Qual o privilégio que um usuário deve receber para estabelecer login no Oracle Server? É um
      privilégio de objeto ou sistema?
      _____________________________________________________________________
   2. Qual o privilégio que um usuário deve receber para criar tabelas?
      _____________________________________________________________________
   3. Se você criar uma tabela, quem poderá passar privilégios para outros usuários sobre sua tabela?
      _____________________________________________________________________
   4. Você é o DBA. Você está criando muitos usuários que estão exigindo os mesmos privilégios de
      sistema. O que você faria para tornar seu trabalho mais fácil?
      _____________________________________________________________________
   5. Que comando você usa para alterar sua senha?
      _____________________________________________________________________
   6. Conceda acesso à tabela DEPT a outro usuário. Faça com que o usuário lhe conceda acesso de
      consulta à tabela DEPT dele(a).
   7. Consulte todas as linhas na tabela DEPT.

         DEPTNO    DNAME            LOC
         ------    ----------       ---------
             10    ACCOUNTING       NEW YORK
             20    RESEARCH         DALLAS
             30    SALES            CHICAGO
             40    OPERATIONS       BOSTON

   8. Adicione uma nova linha à tabela DEPT. A equipe 1 deve adicionar Education como o
      departamento número 50. A Equipe 2 deve adicionar o departamento Administration como o
      departamento número 50. Torne as alterações permanentes.
   9. Crie um sinônimo para a tabela DEPT da outra equipe.




                          Introdução ao Oracle: SQL e PL/SQL 14-21
Exercício 14 (continuação)
   10. Consulte todas as linhas na tabela DEPT da outra equipe, usando o sinônimo.

         Resultados da instrução SELECT para a Equipe 1.
         DEPTNO     DNAME                LOC
         ------     --------------       ---------
             10     ACCOUNTING           NEW YORK
             20     RESEARCH             DALLAS
             30     SALES                CHICAGO
             40     OPERATIONS           BOSTON
             50     ADMINISTRATION
         Resultados da instrução SELECT para a Equipe 2.
         DEPTNO     DNAME                LOC
         ------     --------------       ---------
             10     ACCOUNTING           NEW YORK
             20     RESEARCH             DALLAS
             30     SALES                CHICAGO
             40     OPERATIONS           BOSTON
             50     EDUCATION


   11. Consulte o dicionário de dados USER_TABLES para ver as informações sobre as tabelas que
       você possui.

         TABLE_NAME
         ----------------
         BONUS
         CUSTOMER
         DEPARTMENT
         DEPT
         DUMMY
         EMP
         EMPLOYEE
         ITEM
         MY_EMPLOYEE
         ORD
         PRICE
         PRODUCT
         SALGRADE
         13 rows selected.




                         Introdução ao Oracle: SQL e PL/SQL 14-22
Exercício 14 (continuação)
   12. Consulte a view de dicionário de dados ALL_TABLES para ver as informações sobre todas as
       tabelas que você pode acessar. Exclua as suas próprias tabelas.

         TABLE_NAME       OWNER
         ----------       -----------
         DEPT             <user2>

   13. Revogue o privilégio SELECT da outra equipe.




                         Introdução ao Oracle: SQL e PL/SQL 14-23
Introdução ao Oracle: SQL e PL/SQL 14-24
15
             SQL Workshop




Copyright  Oracle Corporation, 1999. Todos os direitos reservados.
Visão Geral do Workshop

          • Criando tabelas e seqüências
          • Modificando dados nas tabelas
          • Modificando uma definição de tabela
          • Criando uma view
          • Criando scripts que contenham comandos
            SQL e SQL*Plus
          • Gerando um relatório simples



       15-2       Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Visão Geral do Workshop
 Neste workshop você estruturará um conjunto de tabelas de bancos de dados para uma aplicação de
 vídeo. Ao criar as tabelas, você inserirá, atualizará e deletará registros em um banco de dados de
 armazenamento de vídeo e gerará um relatório. O banco de dados contém apenas as tabelas
 essenciais.
 Observação: Se você quiser estruturar as tabelas, poderá executar o script buildtab.sql no
 SQL*Plus. Se você quiser eliminar as tabelas, poderá executar o script dropvid.sql no
 SQL*Plus. Você poderá então executar o script buildvid.sql no SQL*Plus para criar e povoar
 a tabela. Se você usar o script buildvid.sql para estruturar e povoar as tabelas, inicie com o
 Exercício 6b.




                            Introdução ao Oracle: SQL e PL/SQL 15-2
Exercício 15
   1. Crie as tabelas de acordo com as tabelas de exemplo a seguir. Escolha os tipos de dados
      apropriados e certifique-se de adicionar restrições de integridade.
          a. Nome da tabela: MEMBER
 Column_      MEMBER_ LAST_               FIRST_NAME    ADDRESS      CITY        PHONE          JOIN_
 Name         ID      NAME                                                                      DATE
 Key          PK
 Type
 Null/        NN,U          NN                                                                  NN
 Unique
 Default                                                                                        System
 Value                                                                                          Date
 Datatype     Number        VARCHAR2      VARCHAR2      VARCHAR2     VARCHAR2    VARCHAR2       Date

 Length       10            25            25            100          30          15




          b. Nome da tabela: TITLE
     Column_       TITLE_ID       TITLE        DESCRIPTION    RATING        CATEGORY   RELEASE_
     Name                                                                              DATE
     Key           PK
     Type
     Null/         NN,U           NN           NN
     Unique
     Check                                                    G, PG, R,     DRAMA,
                                                              NC17, NR      COMEDY,
                                                                            ACTION,
                                                                            CHILD,
                                                                            SCIFI,
                                                                            DOCUMEN
                                                                            TARY
     Datatype      Number         VARCHAR2     VARCHAR2       VARCHAR2      VARCHAR2   Date
     Length        10             60           400            4             20




                                 Introdução ao Oracle: SQL e PL/SQL 15-3
Exercício 15 (continuação)
      c. Nome da tabela: TITLE_COPY
      Column     COPY_ID                TITLE_ID               STATUS
      Name
      Key        PK                     PK,FK
      Type
      Null/      NN,U                   NN,U                   NN
      Unique
      Check                                                    AVAILABLE,
                                                               DESTROYED,
                                                               RENTED,
                                                               RESERVED
      FK Ref                            TITLE
      Table
      FK Ref                            TITLE_ID
      Col
      Datatype   Number                 Number                 VARCHAR2
      Length     10                     10                     15


      d. Nome da tabela: RENTAL
      Column     BOOK_       MEMBER_     COPY_     ACT_RET_   EXP_RET_      TITLE_
      Name       DATE        ID          ID        DATE       DATE          ID
      Key        PK          PK,FK1      PK,FK2                             PK,FK2
      Type
      Default    System                                       System Date
      Value      Date                                         + 2 days
      FK Ref                 MEMBER      TITLE_                             TITLE_
      Table                              COPY                               COPY
      FK Ref                 MEMBER_     COPY_                              TITLE_ID
      Col                    ID          ID
      Datatype   Date        Number      Number    Date       Date          Number
      Length                 10          10                                 10




                          Introdução ao Oracle: SQL e PL/SQL 15-4
Exercício 15 (continuação)
      e. Nome da tabela: RESERVATION
          Column             RES_                  MEMBER_                 TITLE_
          Name               DATE                  ID                      ID
          Key                PK                    PK,FK1                  PK,FK2
          Type
          Null/              NN,U                  NN,U                    NN
          Unique
          FK Ref                                   MEMBER                  TITLE
          Table
          FK Ref                                   MEMBER_ID               TITLE_ID
          Column
          Datatype           Date                  Number                  Number
          Length                                   10                      10

   2. Verifique se as tabelas e as restrições foram criadas adequadamente, verificando o dicionário
      de dados.
         TABLE_NAME
         -----------
         MEMBER
         RENTAL
         RESERVATION
         TITLE
         TITLE_COPY



         CONSTRAINT_NAME                                C   TABLE_NAME
         ------------------------------                 -   --------------
         MEMBER_LAST_NAME_NN                            C   MEMBER
         MEMBER_JOIN_DATE_NN                            C   MEMBER
         MEMBER_MEMBER_ID_PK                            P   MEMBER
         RENTAL_BOOK_DATE_COPY_TITLE_PK                 P   RENTAL
         RENTAL_MEMBER_ID_FK                            R   RENTAL
         RENTAL_COPY_ID_TITLE_ID_FK                     R   RENTAL
         RESERVATION_RESDATE_MEM_TIT_PK                 P   RESERVATION
         RESERVATION_MEMBER_ID                          R   RESERVATION
         RESERVATION_TITLE_ID                           R   RESERVATION
         ...
         17 rows selected.




                          Introdução ao Oracle: SQL e PL/SQL 15-5
Exercício 15 (continuação)
   3. Crie seqüências para identificar exclusivamente cada linha das tabelas MEMBER e TITLE.
      a. Número de membro para tabela MEMBER: inicie com 101; não permita o armazenamento
         em cache dos valores. Nomeie a seqüência member_id_seq.
      b. Número de título para a tabela TITLE: inicie com 92; não permita o armazenamento em
         cache. Nomeie a seqüência title_id_seq.
      c. Verifique a existência das seqüências no dicionário de dados.
         SEQUENCE_NAME INCREMENT_BY LAST_NUMBER
         -------------- ------------ -----------
         TITLE_ID_SEQ              1          92
         MEMBER_ID_SEQ             1         101

   4. Adicione dados às tabelas. Crie um script para cada conjunto de dados a adicionar.
      a. Adicione títulos de filmes à tabela TITLE . Crie um script para fornecer as informações
         sobre os filmes. Salve o arquivo de script como p8q4.sql. Use as seqüências para
         identificar exclusivamente cada título. Informe as datas de lançamento no formato
         DD-MON-YYYY. Lembre-se que as aspas simples devem ser tratadas com atenção em
         um campo de caractere. Verifique as adições.
         TITLE
         ------------------------
         Willie and Christmas Too
         Alien Again
         The Glob
         My Day Off
         Miracles on Ice
         Soda Gang
         6 rows selected.




                         Introdução ao Oracle: SQL e PL/SQL 15-6
Exercício 15 (continuação)

      Title         Description                       Rating   Category   Release_date
      Willie and    All of Willie’s friends make      G        CHILD      05-OCT-1995
      Christmas     a Christmas list for Santa, but
      Too           Willie has yet to add his own
                    wish list.
      Alien Again   Yet another installation of       R        SCIFI      19-MAY-1995
                    science fiction history. Can
                    the heroine save the planet
                    from the alien life form?
      The Glob      A meteor crashes near a           NR       SCIFI      12-AUG-1995
                    small American town and
                    unleashes carnivorous goo in
                    this classic.
      My Day Off    With a little luck and a lot of   PG       COMEDY     12-JUL-1995
                    ingenuity, a teenager skips
                    school for a day in New York
      Miracles on   A six-year-old has doubts         PG       DRAMA      12-SEP-1995
      Ice           about Santa Claus, but she
                    discovers that miracles really
                    do exist.
      Soda Gang     After discovering a cache of      NR       ACTION     01-JUN-1995
                    drugs, a young couple find
                    themselves pitted against a
                    vicious gang.




                       Introdução ao Oracle: SQL e PL/SQL 15-7
Exercício 15 (continuação)
      b. Adicione dados à tabela MEMBER. Crie um script nomeado p15q4b.sql para pedir
         informações aos usuários. Execute o script. Certifique-se de usar a seqüência para adicionar
         o membro números.

       First_
       Name       Last_Name      Address           City           Phone            Join_Date
       Carmen     Velasquez      283 King          Seattle        206-899-6666     08-MAR-1990
                                 Street
       LaDoris    Ngao           5 Modrany         Bratislava     586-355-8882     08-MAR-1990
       Midori     Nagayama       68 Via            Sao Paolo      254-852-5764     17-JUN-1991
                                 Centrale
       Mark       Quick-to-      6921 King         Lagos          63-559-7777      07-APR-1990
                  See            Way
       Audry      Ropeburn       86 Chu Street     Hong           41-559-87        18-JAN-1991
                                                   Kong
       Molly      Urguhart       3035 Laurier      Quebec         418-542-9988     18-JAN-1991




                         Introdução ao Oracle: SQL e PL/SQL 15-8
Exercício 15 (continuação)
      c. Adicione as seguintes cópias de filmes à tabela TITLE_COPY:
      Observação: Obtenha os números do title_id para este exercício.
       Title                       Copy_Id                          Status
       Willie and Christmas Too    1                                AVAILABLE
       Alien Again                 1                                AVAILABLE
                                   2                                RENTED
       The Glob                    1                                AVAILABLE
       My Day Off                  1                                AVAILABLE
                                   2                                AVAILABLE
                                   3                                RENTED
       Miracles on Ice             1                                AVAILABLE
       Soda Gang                   1                                AVAILABLE

      d. Adicione os seguintes aluguéis à tabela RENTAL:
      Observação: O número de título pode ser diferente, dependendo no número de seqüência.
       Title_   Copy_       Member_
       Id       Id          Id           Book_date     Exp_Ret_Date             Act_Ret_Date
       92       1           101          3 days ago    1 day ago                2 days ago
       93       2           101          1 day ago     1 day from now
       95       3           102          2 days ago    Today
       97       1           106          4 days ago    2 days ago               2 days ago




                         Introdução ao Oracle: SQL e PL/SQL 15-9
Exercício 15 (continuação)
   5. Crie uma view nomeada TITLE_AVAIL para mostrar os títulos dos filmes e a disponibilidade
      de cada cópia e a data esperada de devolução, caso esteja alugado. Consulte todas as linhas a
      partir da view. Ordene os resultados por título.
         TITLE                       COPY_ID STATUS              EXP_RET_D
         ------------------ ------- ---------- ------------
         Alien Again                           1   AVAILABLE
         Alien Again                           2   RENTED        05-NOV-97
         Miracles on Ice                       1   AVAILABLE
         My Day Off                            1   AVAILABLE
         My Day Off                            2   AVAILABLE
         My Day Off                            3   RENTED        06-NOV-97
         Soda Gang                             1   AVAILABLE     04-NOV-97
         The Glob                              1   AVAILABLE
         Willie and Christmas Too              1   AVAILABLE     05-NOV-97
         9 rows selected.

   6. Faça alterações nos dados das tabelas.
      a. Adicione um novo título. O filme se chama "Interstellar Wars", que tem censura PG e é
         classificado como ficção científica. O data de lançamento é 07-JUL-77. A descrição é filme
         de ação "Futuristic interstellar action movie. Can the rebels save the humans from the evil
         empire?" Certifique-se de adicionar um registro da cópia do título para as duas cópias.
      b. Informe duas reservas. Uma reserva é para Carmen Velasquez, que deseja alugar
         "Interstellar Wars". Outra é para Mark Quick-to-See, que deseja alugar "Soda Gang".




                         Introdução ao Oracle: SQL e PL/SQL 15-10
Exercício 15 (continuação)
      c. A cliente Carmen Velasquez aluga a cópia 1 do filme "Interstellar Wars". Remova a sua
         reserva do filme. Registre as informações sobre o aluguel. Autorize o valor padrão
         da data de devolução estimada a ser usado. Verifique se o aluguel foi registrado usando a
         view que você criou.

          TITLE                                COPY_ID STATUS             EXP_RET_D
          ----------------------- ------- --------- ----------------
          Alien Again                   1 AVAILABLE
          Alien Again                   2 RENTED    05-NOV-97
          Interstellar Wars             1 RENTED    08-NOV-97
          Interstellar Wars             2 AVAILABLE
          Miracles on Ice               1 AVAILABLE
          My Day Off                    1 AVAILABLE
          My Day Off                    2 AVAILABLE
          My Day Off                    3 RENTED    06-NOV-97
          Soda Gang                     1 AVAILABLE 04-NOV-97
          The Glob                      1 AVAILABLE
          Willie and Christmas Too      1 AVAILABLE 05-NOV-97
          11 rows selected.
   7. Faça uma modificação em uma das tabelas.
      a. Adicione uma coluna PRICE à tabela TITLE para registrar o preço de compra o vídeo.
         A coluna deve ter um comprimento total de oito registros e duas casas decimais. Verifique
         as modificações.

          Name                  Null?          Type
          --------------        ---------      -----
          TITLE_ID              NOT NULL       NUMBER(10)
          TITLE                 NOT NULL       VARCHAR2(60)
          DESCRIPTION           NOT NULL       VARCHAR2(400)
          RATING                               VARCHAR2(4)
          CATEGORY                             VARCHAR2(20)
          RELEASE_DATE                         DATE
          PRICE                                NUMBER(8,2)




                          Introdução ao Oracle: SQL e PL/SQL 15-11
Exercício 15 (continuação)
       b. Crie um script denominado p15q7b.sql para atualizar cada vídeo com o preço de
          acordo com a lista a seguir.
       Observação: Obtenha os title_id numbers para este exercício.
         Title                                           Price
         Willie and Christmas Too                        25
         Alien Again                                     35
         The Glob                                        35
         My Day Off                                      35
         Miracles on Ice                                 30
         Soda Gang                                       35
         Interstellar Wars                               29

       c. Certifique-se de que no futuro todos os títulos contenham um preço. Verifique a restrição.

          CONSTRAINT_NAME               C SEARCH_CONDITION
          ------------------            -- -----------------
          TITLE_PRICE_NN                C PRICE IS NOT NULL

   8. Crie um relatório intitulado Relatório Histórico de Cliente. Esse relatório conterá o histórico
      de aluguel de vídeos de cada cliente. Certifique-se de incluir o nome do cliente, o filme
      alugado, as datas e a duração do aluguel. Número total de aluguéis de todos os clientes no
      período de criação do relatório. Salve o script em um arquivo nomeado p15q8.sql.

          MEMBER           TITLE                                          BOOK_DATE DURATION
          ---------------- ------------------------                       --------- --------
          Carmen Velasquez Willie and Christmas Too                       03-NOV-97        1
                           Alien Again                                    09-AUG-98
                                    Interstellar Wars                     10-AUG-98


          LaDoris Ngao              My Day Off                            08-AUG-98


          Molly Urguhart            Soda Gang                             06-AUG-98                 2




                         Introdução ao Oracle: SQL e PL/SQL 15-12
16
   Declarando Variáveis




Copyright  Oracle Corporation, 1999. Todos os direitos reservados.
Objetivos
         Depois de completar esta lição, você poderá
         fazer o seguinte:
           • Listar os benefícios do código PL/SQL
           • Reconhecer o bloco PL/SQL básico e suas
             seções
           • Descrever o significado das variáveis no
             código PL/SQL
           • Declarar Variáveis PL/SQL
           • Executar o bloco PL/SQL


        16-2       Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Objetivo da Lição
 Esta lição apresenta as regras e estruturas básicas para criação e execução dos blocos de códigos
 PL/SQL. Ela também mostra como declarar variáveis e atribuir tipos de dados a elas.




                             Introdução ao Oracle: SQL e PL/SQL 16-2
Sobre PL/SQL

          • A linguagem PL/SQL é uma extensão da
            linguagem SQL com recursos de design de
            linguagens de programação.
          • As instruções de consulta e a manipulação
            de dados em SQL estão incluídas nas
            unidades procedurais de código.




       16-3       Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Sobre PL/SQL
 A linguagem PL/SQL (Procedural Language/SQL) é uma extensão de linguagem procedural da
 Oracle Corporation para SQL, a linguagem de acesso a dados padrão para bancos de dados
 relacionais. A linguagem PL/SQL oferece recursos de engenharia de software modernos, como, por
 exemplo, a encapsulação de dados, o tratamento de exceções, a ocultação de informações e a
 orientação a objeto, etc., trazendo os recursos de programação mais modernos para o Oracle Server
 e o Toolset.
 A linguagem PL/SQL incorpora muitos recursos avançados criados em linguagens de programação
 projetadas durante as décadas de 70 e 80. Além de aceitar a manipulação de dados, ele também
 permite que as instruções de consulta da linguagem SQL sejam incluídas em unidades procedurais
 de código e estruturadas em blocos, tornando a linguagem SQL uma linguagem avançada de
 processamento de transações. Com a linguagem PL/SQL, você pode usar as instruções SQL para
 refinar os dados do Oracle e as instruções de controle PL/SQL para processar os dados.




                            Introdução ao Oracle: SQL e PL/SQL 16-3
Benefícios da Linguagem PL/SQL

         Integração


                                                                   Aplicação




                                     Biblioteca                                          Oracle Server
                                   compartilhada

        16-4       Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Integração
  A linguagem PL/SQL desempenha um papel central tanto para o Oracle Server (através de
  procedimentos armazenados, funções armazenadas, gatilhos de banco de dados e pacotes) quanto
  para as ferramentas de desenvolvimento Oracle (através de gatilhos de componente do Oracle
  Developer).
  As aplicações do Oracle Developer fazem uso das bibliotecas compartilhadas que armazenam código
  (procedimentos e funções) e que podem ser acessadas local ou remotamente. O Oracle Developer
  consiste no Oracle Forms, Oracle Reports e Oracle Graphics.
  Os tipos de dados SQL também podem ser usados no código PL/SQL. Combinados com o acesso
  direto que a linguagem SQL fornece, esses tipos de dados compartilhados integram a linguagem
  PL/SQL com o dicionário de dados do Oracle Server. A linguagem PL/SQL une o acesso
  conveniente à tecnologia de banco de dados com a necessidade de capacidade de programação
  procedural.
PL/SQL nas Ferramentas Oracle
 Várias ferramentas Oracle, inclusive o Oracle Developer, têm o seu próprio mecanismo PL/SQL, o
 qual é independente do mecanismo presente no Oracle Server.
 O mecanismo filtra as instruções SQL e as envia individualmente ao executor da instrução SQL no
 Oracle Server. Ele processa as instruções procedurais restantes no executor da instrução procedural,
 que está no mecanismo PL/SQL.
 O executor da instrução procedural processa os dados que são locais para a aplicação (que já estão
 no ambiente do cliente, em vez de estarem no banco de dados). Isso reduz o trabalho enviado ao
 Oracle Server e o número de cursores de memória necessários.

                             Introdução ao Oracle: SQL e PL/SQL 16-4
Benefícios da Linguagem PL/SQL
         Melhorar desempenho

                                     SQL
                                                                SQL                     Outros
                Aplicação
                                            SQL                                         DBMSs
                                                          SQL




                                                 SQL
                                                 IF...THEN
                                                    SQL                             Oracle com
                Aplicação                        ELSE                                 PL/SQL
                                                    SQL
                                                 END IF;
                                                 SQL


        16-5      Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Desempenho Melhorado
 A linguagem PL/SQL pode melhorar o desempenho de uma aplicação. Os benefícios diferem
 dependendo do ambiente de execução.
   •   A linguagem PL/SQL pode ser usado para agrupar as instruções SQL em um único bloco e
       enviar esse bloco inteiro para o servidor em uma única chamada, reduzindo assim o tráfego da
       rede. Sem o código PL/SQL, as instruções SQL seriam enviadas ao Oracle Server uma de
       cada vez. Cada instrução SQL resulta em uma outra chamada do Oracle Server e uma maior
       sobrecarga de desempenho. Em um ambiente de rede, a sobrecarga pode se tornar
       significativa. Como ilustra o slide, se sua aplicação for SQL intensiva, você pode usar os
       subprogramas e blocos PL/SQL para agrupar as instruções SQL antes de enviá-las ao Oracle
       Server para execução.
   •   A linguagem PL/SQL também pode cooperar com as ferramentas de desenvolvimento de
       aplicação do Oracle Server como, por exemplo, Oracle Developer Forms e Reports. Ao
       adicionar recursos de processamento procedural a essas ferramentas, a linguagem PL/SQL
       aumenta o desempenho.
 Observação: Os procedimentos e as funções declaradas como parte de uma aplicação do Developer
 são distintos daqueles armazenados no banco de dados, embora as suas estruturas gerais sejam as
 mesmas. Os subprogramas armazenados são objetos de banco de dados e estão armazenados no
 dicionário de dados. Eles podem ser acessados por qualquer número de aplicações, incluindo as
 aplicações do Developer.


                            Introdução ao Oracle: SQL e PL/SQL 16-5
Estrutura de Bloco PL/SQL

                  • DECLARE – Opcional
                        Variáveis, cursores, exceções definidas
                        pelo usuário
                  • BEGIN – Obrigatório
                     – Instruções SQL
                     – Instruções PL/SQL
                  • EXCEPTION – Opcional
                        Ações a serem desempenhadas quando                               DECLARE
                        ocorrem erros
                  • END; – Obrigatório                                                   BEGIN

                                                                                         EXCEPTION

                                                                                         END;



        16-6       Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Estrutura de Bloco PL/SQL
 A linguagem PL/SQL é uma linguagem estruturada em blocos, o que significa que os programas
 podem ser divididos em blocos lógicos. Um bloco PL/SQL consiste em até três seções: declarativa
 (opcional), executável (necessária) e tratamento de exceção (opcional). Apenas as palavras-chave
 BEGIN e END são necessárias. Você poderá declarar variáveis localmente para o bloco que as usa.
 As condições de erro (conhecidas como exceções) podem ser tratadas especificamente no bloco aos
 quais elas se aplicam. Você poderá armazenar e alterar os valores em um bloco PL/SQL declarando
 e referenciando variáveis e outros identificadores.
 A tabela a seguir descreve as três seções de bloco:
  Seção                  Descrição                                                          Inclusão
  Declarativa            Contém todas as variáveis, constantes, cursores e                  Opcional
                         exceções definidas pelo usuário que são referenciadas
                         nas seções executável e declarativa
  Executável             Contém instruções SQL para manipular dados no                      Obrigatória
                         banco de dados e instruções PL/SQL para manipular
                         dados no bloco
  Tratamento de          Especifica as ações a desempenhar quando erros e                   Opcional
  exceção                condições anormais surgem na seção executável




                             Introdução ao Oracle: SQL e PL/SQL 16-6
Estrutura de Bloco PL/SQL

                       DECLARE
                         v_variable VARCHAR2(5);
                       BEGIN
                         SELECT     column_name
                            INTO    v_variable
                            FROM    table_name;
                       EXCEPTION
                         WHEN exception_name THEN                                   DECLARE
                         ...
                       END;                                                         BEGIN

                                                                                    EXCEPTION

                                                                                    END;




        16-7      Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Executando Instruções e Blocos PL/SQL a partir do Código SQL*Plus
   •   Coloque um ponto-e-vírgula (;) no final de uma instrução SQL ou instrução de controle
       PL/SQL.
   •   Use uma barra (/) para executar o bloco anônimo PL/SQL no buffer de SQL*Plus. Quando o
       bloco for executado corretamente, sem erros que não possam ser tratados, a saída de
       mensagem deverá ser a seguinte:

        PL/SQL procedure successfully completed
        (Procedimento PL/SQL concluído corretamente)
   •   Coloque um ponto (.) para fechar um buffer de SQL*Plus. Um bloco PL/SQL é tratado como
       uma instrução contínua no buffer e os ponto-e-vírgulas no bloco não fecham ou executam o
       buffer.
 Observação: Em PL/SQL, um erro é chamado de exceção.
 As palavras-chave de seção DECLARE, BEGIN e EXCEPTION não são seguidas por ponto-e-
 vírgulas. Entretanto, END e todas as outras instruções PL/SQL necessitam de um ponto-e-vírgula
 para terminar a instrução. Você poderá criar uma string de instruções na mesma linha, mas esse
 método não é recomendado pela clareza ou edição.




                            Introdução ao Oracle: SQL e PL/SQL 16-7
Tipos de Bloco
                Anônimo                      Procedimento                                Função
          [DECLARE]                        PROCEDURE name                       FUNCTION name
                                           IS                                   RETURN datatype
                                                                                IS
          BEGIN                            BEGIN                                BEGIN
            --statements                     --statements                          --statements
                                                                                   RETURN value;
          [EXCEPTION]                      [EXCEPTION]                          [EXCEPTION]

          END;                             END;                                 END;




         16-8      Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Tipos de Bloco
  Toda unidade PL/SQL compreende um ou mais blocos. Esses blocos podem ser inteiramente separados
  ou aninhados um dentro do outro. As unidades básicas (procedimentos e funções, também conhecidas
  como subprogramas e blocos anônimos) que compõem um programa PL/SQL são blocos lógicos, os
  quais podem conter qualquer número de sub-blocos aninhados. Por isso, um bloco pode representar
  uma pequena parte de um outro bloco, o qual, por sua vez pode ser parte da unidade de código inteira.
  Dos dois tipos de construções PL/SQL disponíveis, blocos anônimos e subprogramas, apenas os blocos
  anônimos são abordados neste curso.
Blocos Anônimos
 Os blocos anônimos são blocos sem nome. Eles são declarados em um ponto do aplicativo onde eles
 devem ser executados e são passados para o mecanismo PL/SQL para serem executados em tempo de
 execução. Você poderá incorporar um bloco anônimo em um programa pré-compilador e em SQL*Plus
 ou Server Manager. Os gatilhos nos componentes do Oracle Developer consistem nesses blocos.
Subprogramas
 Os subprogramas são blocos PL/SQL nomeados que podem assumir parâmetros e podem ser
 chamados. Você pode declará-los como procedimentos ou como funções. Geralmente, você deve usar
 um procedimento para desempenhar uma ação e uma função para calcular um valor.
 Você poderá armazenar subprogramas no servidor ou no nível de aplicação. Ao usar os componentes
 do Oracle Developer (Forms, Relatórios e Gráficos), você poderá declarar os procedimentos e funções
 como parte da aplicação (um form ou relatório) e chamá-los a partir de outros procedimentos, funções e
 gatilhos (veja a próxima página) na mesma aplicação sempre que necessário.
 Observação: Uma função é similar a um procedimento, exceto que uma função deve retornar um valor.
 Os procedimentos e funções são abordados no próximo curso sobre PL/SQL.

                             Introdução ao Oracle: SQL e PL/SQL 16-8
Construções de Programa

                                                                                      Procedimento/
                     Bloco
                                                                                         função
                    anônimo
                                                                                      armazenado(a)
                                                  DECLARE


                                                  BEGIN                                Procedimento/
                    Gatilho
                                                                                           função
                  de aplicação
                                                                                        de aplicação
                                                  EXCEPTION


                    Gatilho de                    END;                                 Procedimento/
                    banco de                                                              função
                     dados                                                               em pacote




        16-9         Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Construções de Programa
 A tabela a seguir descreve em linhas gerais uma variedade de construções de programa PL/SQL que
 usam o bloco PL/SQL básico. Eles estão disponíveis de acordo com o ambiente no qual eles são
 executados.
  Construção de
  Programa             Descrição                                                Disponibilidade
  Bloco anônimo        O bloco PL/SQL não nomeado é incorporado                 Todos os ambientes PL/SQL
                       em uma aplicação ou é emitido interativamente


  Função ou            O bloco PL/SQL nomeado armazenado no                     Oracle Server
  procedimento         Oracle Server que pode aceitar parâmetros e
  armazenado           pode ser chamado repetidamente pelo nome
  Função ou            O bloco PL/SQL nomeado armazenado na                     Componentes do Oracle
  procedimento de      aplicação Oracle Developer ou na biblioteca              Developer — por exemplo,
  aplicação            compartilhada que pode aceitar parâmetros e              Forms
                       pode ser chamado repetidamente pelo nome
  Pacote               Módulo PL/SQL nomeado que agrupa                         Componentes do Oracle Server e
                       procedimentos, funções e identificadores                 Oracle Developer — por
                       relacionados                                             exemplo, Forms



                               Introdução ao Oracle: SQL e PL/SQL 16-9
Construções de Programa

                                                                                         Stored
                                                                                      Procedimento/
                Anonymous
                   Bloco
                                                                                       procedure/
                                                                                          função
                   block
                  anônimo                                                             armazenado(a)
                                                  DECLARE                               function


                                                  BEGIN                                Application
                                                                                       Procedimento/
                Application
                  Gatilho
                                                                                       procedure/
                                                                                           função
                detrigger
                   aplicação
                                                                                        de aplicação
                                                                                         function
                                                  EXCEPTION


                  Gatilho de                      END;                                  Packaged
                                                                                       Procedimento/
                  Database
                  banco de                                                             procedure/
                                                                                           função
                   trigger                                                               em pacote
                     dados                                                               function




        16-10        Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Construções de Programa (continuação)
  Construção de
  Programa            Descrição                                                Disponibilidade
  Gatilho de banco    O bloco PL/SQL que é associado com uma                   Oracle Server
  de dados            tabela de banco de dados e que é acionado
                      automaticamente quando disparado pela
                      instrução DML

  Gatilho de          O bloco PL/SQL que é associado com uma                   Componentes do Oracle
  aplicação           evento de aplicação e que é acionado                     Developer — por exemplo,
                      automaticamente                                          Forms




                              Introdução ao Oracle: SQL e PL/SQL 16-10
Uso de Variáveis

         Usar variáveis para:
           • Armazenamento temporário de dados
           • Manipulação de valores armazenados
           • Reutilização
           • Facilidade de manutenção




        16-11      Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Uso de Variáveis
 Com o código PL/SQL, você poderá declarar variáveis e depois usá-las em instruções procedurais e
 SQL onde uma expressão possa ser usada.
   •   Armazenamento temporário de dados
       Os dados podem ser armazenados temporariamente em uma ou mais variáveis para uso quando
       na validação da entrada de dados para processamento posterior no processo de fluxo de dados.
   •   Manipulação de valores armazenados
       As variáveis podem ser usadas para cálculo e manipulação de outros dados sem acessar o banco
       de dados.
   •   Reutilização
       Quando declaradas, as variáveis podem ser usadas repetidamente em uma aplicação
       simplesmente referenciando-as em outras instruções, incluindo outras instruções declarativas.
   •   De fácil manutenção
       Ao usar %TYPE e %ROWTYPE (mais informações sobre %ROWTYPE são abordadas em
       uma lição subseqüente), você declara variáveis, baseando as declarações nas definições das
       colunas de banco de dados. As variáveis PL/SQL ou variáveis de cursor anteriormente
       declaradas no escopo atual poderão usar também os atributos %TYPE e %ROWTYPE como
       especificadores de tipos de dados. Se uma definição subjacente for alterada, a declaração de
       variável se altera de acordo durante a execução. Isso permite a independência dos dados, reduz
       custos de manutenção e permite que os programas se adaptem, conforme o banco de dados for
       alterado, para atender às novas necessidades comerciais.

                            Introdução ao Oracle: SQL e PL/SQL 16-11
Tratando Variáveis em PL/SQL

           • Declarar e inicializar as variáveis na seção
             de declaração.
           • Atribuir novos valores às variáveis na
             seção executável.
           • Passar valores aos blocos PL/SQL através
             de parâmetros.
           • Ver os resultados pelas variáveis de saída.




        16-12      Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Tratando Variáveis em PL/SQL
   • Declarar e inicializar as variáveis na seção de declaração.
      Você poderá declarar variáveis na parte declarativa de qualquer subprograma, pacote ou bloco
      PL/SQL. As declarações alocam espaço de armazenamento para um valor, especificam seus
      tipos de dados e nomeiam a localização de armazenamento para que você possa referenciá-
      los. As declarações poderão também atribuir um valor inicial e impor a restrição NOT NULL.
   • Atribuir novos valores às variáveis na seção executável.
          – O valor existente da variável é substituído pelo novo.
          – Não são permitidas referências posteriores. Você deve declarar um variável antes de
             referenciá-la em outras instruções, incluindo outras instruções declarativas.
    •   Passar valores aos subprogramas PL/SQL através de parâmetros.
        Há três modos de parâmetros, IN (o default), OUT e IN OUT. Você deve usar o parâmetro IN
        para passar valores aos subprogramas que estão sendo chamados. Você deve usar o parâmetro
        OUT para retornar valores ao chamador de um subprograma. E você deve usar o parâmetro IN
        OUT para passar valores iniciais ao subprograma que está sendo chamado e para retornar
        valores ao chamador. Os parâmetros dos subprogramas IN e OUT são abordados em outro
        curso.
    •   Ver os resultados em um bloco PL/SQL através de variáveis de saída.
        Você poderá usar variáveis de referências para a entrada ou saída em instruções de
        manipulação de dados SQL.



                            Introdução ao Oracle: SQL e PL/SQL 16-12
Tipos de Variáveis

         • Variáveis PL/SQL:
              – Escalar
              – Composta
              – Referência
              – LOB (objetos grandes)
         • Variáveis Não-PL/SQL: Variáveis de
           ligação e de host



      16-13      Copyright  Oracle Corporation, 1999. Todos os direitos reservados.




Todas as variáveis PL/SQL têm um tipo de dados, o qual especifica um formato de armazenamento,
restrições e uma faixa válida de valores. A linguagem PL/SQL suporta quatro categorias de tipos de
dados — escalar, composta, referencial e LOB (objeto grande) — que você pode usar para declarar
variáveis, constantes e indicadores.
  •   Os tipos de dados escalares armazenam um único valor. Os principais tipos de dados são
      aqueles que correspondem aos tipos de coluna nas tabelas do Oracle Server; a linguagem
      PL/SQL também suporta variáveis booleanas.
  •   Os tipos de dados compostos como, por exemplo, os registros, permitem que os grupos de
      campos sejam definidos e manipulados nos blocos PL/SQL. Os tipos de dados compostos são
      mencionados apenas brevemente neste curso.
  •   Os tipos de dados referenciais armazenam valores, chamados de indicadores, que designam
      outros itens de programa. Os tipos de dados referenciais não são abordados neste curso.
  •   Os tipos de dados LOB armazenam valores, chamados de endereços, que especificam a
      localização de objetos grandes (imagens gráficas, por exemplo) que são armazenadas fora de
      linha. Os tipos de dados LOB são abordados apenas brevemente neste curso.
As variáveis não-PL/SQL incluem variáveis da linguagem de host declaradas em programas do pré-
compilador, campos de tela nas aplicações Forms e variáveis de host SQL*Plus.
Para obter mais informações sobre os LOBs, consulte o PL/SQL User’s Guide and Reference,
Release 8, "Fundamentals".



                          Introdução ao Oracle: SQL e PL/SQL 16-13
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt

Mais conteúdo relacionado

Mais procurados

ODI Series - Importar Arquivos Texto para Tabelas
ODI Series - Importar Arquivos Texto para TabelasODI Series - Importar Arquivos Texto para Tabelas
ODI Series - Importar Arquivos Texto para TabelasCaio Lima
 
ODI Tutorial - Modelo de Dados
ODI Tutorial - Modelo de DadosODI Tutorial - Modelo de Dados
ODI Tutorial - Modelo de DadosCaio Lima
 
Banco de Dados II Aula 08 - Linguagem de Consulta SQL (Comandos DML)
Banco de Dados II Aula 08 - Linguagem de Consulta SQL (Comandos DML)Banco de Dados II Aula 08 - Linguagem de Consulta SQL (Comandos DML)
Banco de Dados II Aula 08 - Linguagem de Consulta SQL (Comandos DML)Leinylson Fontinele
 
Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)Leinylson Fontinele
 
Essbase Series - Backup
Essbase Series - BackupEssbase Series - Backup
Essbase Series - BackupCaio Lima
 
ODI Tutorial - Configuração Topologia
ODI Tutorial - Configuração TopologiaODI Tutorial - Configuração Topologia
ODI Tutorial - Configuração TopologiaCaio Lima
 
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)Leinylson Fontinele
 
Essbase Series - Questões para Entrevistas
Essbase Series - Questões para EntrevistasEssbase Series - Questões para Entrevistas
Essbase Series - Questões para EntrevistasCaio Lima
 
ODI Tutorial - Desenvolvendo Procedures
ODI Tutorial - Desenvolvendo ProceduresODI Tutorial - Desenvolvendo Procedures
ODI Tutorial - Desenvolvendo ProceduresCaio Lima
 
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-ptguest519a5b6
 
ODI SERIES - Melhores Práticas
ODI SERIES - Melhores PráticasODI SERIES - Melhores Práticas
ODI SERIES - Melhores PráticasCaio Lima
 

Mais procurados (11)

ODI Series - Importar Arquivos Texto para Tabelas
ODI Series - Importar Arquivos Texto para TabelasODI Series - Importar Arquivos Texto para Tabelas
ODI Series - Importar Arquivos Texto para Tabelas
 
ODI Tutorial - Modelo de Dados
ODI Tutorial - Modelo de DadosODI Tutorial - Modelo de Dados
ODI Tutorial - Modelo de Dados
 
Banco de Dados II Aula 08 - Linguagem de Consulta SQL (Comandos DML)
Banco de Dados II Aula 08 - Linguagem de Consulta SQL (Comandos DML)Banco de Dados II Aula 08 - Linguagem de Consulta SQL (Comandos DML)
Banco de Dados II Aula 08 - Linguagem de Consulta SQL (Comandos DML)
 
Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)
 
Essbase Series - Backup
Essbase Series - BackupEssbase Series - Backup
Essbase Series - Backup
 
ODI Tutorial - Configuração Topologia
ODI Tutorial - Configuração TopologiaODI Tutorial - Configuração Topologia
ODI Tutorial - Configuração Topologia
 
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)
Banco de Dados I - Aula 10 - Banco de Dados Relacional (Modelo Físico)
 
Essbase Series - Questões para Entrevistas
Essbase Series - Questões para EntrevistasEssbase Series - Questões para Entrevistas
Essbase Series - Questões para Entrevistas
 
ODI Tutorial - Desenvolvendo Procedures
ODI Tutorial - Desenvolvendo ProceduresODI Tutorial - Desenvolvendo Procedures
ODI Tutorial - Desenvolvendo Procedures
 
14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt14100015 introducao-oracle-sqlplsql-vol2-pt
14100015 introducao-oracle-sqlplsql-vol2-pt
 
ODI SERIES - Melhores Práticas
ODI SERIES - Melhores PráticasODI SERIES - Melhores Práticas
ODI SERIES - Melhores Práticas
 

Destaque

Introdução ao Oracle 10g
Introdução ao Oracle 10gIntrodução ao Oracle 10g
Introdução ao Oracle 10gKelver Merlotti
 
Gerenciamento de projetos, MPS.BR e qualidade em software
Gerenciamento de projetos, MPS.BR e qualidade em softwareGerenciamento de projetos, MPS.BR e qualidade em software
Gerenciamento de projetos, MPS.BR e qualidade em softwareelliando dias
 
X-Zone - Garantia da Qualidade de Software
X-Zone - Garantia da Qualidade de SoftwareX-Zone - Garantia da Qualidade de Software
X-Zone - Garantia da Qualidade de SoftwareAlexandreBartie
 
Treinamento Oracle Forms
Treinamento Oracle FormsTreinamento Oracle Forms
Treinamento Oracle FormsFelipe Goulart
 
Qualidade de Software com Microsoft Visual Studio
Qualidade de Software com Microsoft Visual StudioQualidade de Software com Microsoft Visual Studio
Qualidade de Software com Microsoft Visual StudioAdriano Bertucci
 
Apostila Modelo ER (Entidade Relacionamento)
Apostila Modelo ER (Entidade Relacionamento)Apostila Modelo ER (Entidade Relacionamento)
Apostila Modelo ER (Entidade Relacionamento)Ricardo Terra
 
Conceitos de básicos de qualidade de software
Conceitos de básicos de qualidade de softwareConceitos de básicos de qualidade de software
Conceitos de básicos de qualidade de softwareRonney Moreira de Castro
 
Testes De Software - Uma Visão Geral
Testes De Software - Uma Visão GeralTestes De Software - Uma Visão Geral
Testes De Software - Uma Visão Geralpaulo peres
 
Conceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidadeConceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidaderzauza
 
Apostila Scrum: Fundamentos do Scrum
Apostila Scrum: Fundamentos do ScrumApostila Scrum: Fundamentos do Scrum
Apostila Scrum: Fundamentos do ScrumMindMasterBrasil
 
Gestão Ágil de Projetos com Scrum
Gestão Ágil de Projetos com ScrumGestão Ágil de Projetos com Scrum
Gestão Ágil de Projetos com ScrumMarcos Garrido
 

Destaque (20)

Mpsbr
MpsbrMpsbr
Mpsbr
 
SQL Oracle
SQL OracleSQL Oracle
SQL Oracle
 
Introdução ao Oracle 10g
Introdução ao Oracle 10gIntrodução ao Oracle 10g
Introdução ao Oracle 10g
 
Gerenciamento de projetos, MPS.BR e qualidade em software
Gerenciamento de projetos, MPS.BR e qualidade em softwareGerenciamento de projetos, MPS.BR e qualidade em software
Gerenciamento de projetos, MPS.BR e qualidade em software
 
Modelagem de processos usando epc
Modelagem de processos usando epcModelagem de processos usando epc
Modelagem de processos usando epc
 
X-Zone - Garantia da Qualidade de Software
X-Zone - Garantia da Qualidade de SoftwareX-Zone - Garantia da Qualidade de Software
X-Zone - Garantia da Qualidade de Software
 
Modelagem de processos
Modelagem de processosModelagem de processos
Modelagem de processos
 
Apostila Oracle 10g
Apostila Oracle 10gApostila Oracle 10g
Apostila Oracle 10g
 
Apostila Oracle
Apostila OracleApostila Oracle
Apostila Oracle
 
Treinamento Oracle Forms
Treinamento Oracle FormsTreinamento Oracle Forms
Treinamento Oracle Forms
 
Fundamentos de Testes de Software
Fundamentos de Testes de SoftwareFundamentos de Testes de Software
Fundamentos de Testes de Software
 
Qualidade de Software com Microsoft Visual Studio
Qualidade de Software com Microsoft Visual StudioQualidade de Software com Microsoft Visual Studio
Qualidade de Software com Microsoft Visual Studio
 
Qualidade de Software
Qualidade de SoftwareQualidade de Software
Qualidade de Software
 
Apostila Modelo ER (Entidade Relacionamento)
Apostila Modelo ER (Entidade Relacionamento)Apostila Modelo ER (Entidade Relacionamento)
Apostila Modelo ER (Entidade Relacionamento)
 
Conceitos de básicos de qualidade de software
Conceitos de básicos de qualidade de softwareConceitos de básicos de qualidade de software
Conceitos de básicos de qualidade de software
 
CMM e CMMI
CMM e CMMICMM e CMMI
CMM e CMMI
 
Testes De Software - Uma Visão Geral
Testes De Software - Uma Visão GeralTestes De Software - Uma Visão Geral
Testes De Software - Uma Visão Geral
 
Conceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidadeConceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidade
 
Apostila Scrum: Fundamentos do Scrum
Apostila Scrum: Fundamentos do ScrumApostila Scrum: Fundamentos do Scrum
Apostila Scrum: Fundamentos do Scrum
 
Gestão Ágil de Projetos com Scrum
Gestão Ágil de Projetos com ScrumGestão Ágil de Projetos com Scrum
Gestão Ágil de Projetos com Scrum
 

Semelhante a 14100015 introducao-oracle-sqlplsql-vol2-pt

Introducao oracle-sqlplsql-vol2-pt
Introducao oracle-sqlplsql-vol2-ptIntroducao oracle-sqlplsql-vol2-pt
Introducao oracle-sqlplsql-vol2-ptValdinho Pereira
 
9i fundamentos adm_banco_de_dados_ii
9i fundamentos adm_banco_de_dados_ii9i fundamentos adm_banco_de_dados_ii
9i fundamentos adm_banco_de_dados_iipedro.prontocor
 
Mapeamento brb 2013 em videoaulas do provas de ti google drive
Mapeamento brb 2013 em videoaulas do provas de ti   google driveMapeamento brb 2013 em videoaulas do provas de ti   google drive
Mapeamento brb 2013 em videoaulas do provas de ti google driveffabii
 
ESTRUTURA_DE_DADOS.pdf
ESTRUTURA_DE_DADOS.pdfESTRUTURA_DE_DADOS.pdf
ESTRUTURA_DE_DADOS.pdfsmftec
 
Tutorialoracleformsbuilder 140813182046-phpapp01
Tutorialoracleformsbuilder 140813182046-phpapp01Tutorialoracleformsbuilder 140813182046-phpapp01
Tutorialoracleformsbuilder 140813182046-phpapp01Audervan S
 
Tutorial oracle forms builder
Tutorial oracle forms builderTutorial oracle forms builder
Tutorial oracle forms builderValdinho Pereira
 
Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...
Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...
Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...Alex Zaballa
 
Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...
Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...
Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...Alex Zaballa
 
Desenvolvimento Delphi
Desenvolvimento DelphiDesenvolvimento Delphi
Desenvolvimento Delphihildebertomelo
 
Artigo data warehouse bd ii - 2015-1
Artigo data warehouse   bd ii - 2015-1Artigo data warehouse   bd ii - 2015-1
Artigo data warehouse bd ii - 2015-1Darlene Coelho
 
Artigo data warehouse bd ii - 2015-1 a
Artigo data warehouse   bd ii - 2015-1 aArtigo data warehouse   bd ii - 2015-1 a
Artigo data warehouse bd ii - 2015-1 aDarlene Coelho
 
Banco de dados
Banco de dadosBanco de dados
Banco de dadosM Serafim
 
5 coisas que todo desenvolvedor deveria saber sobre sql server
5 coisas que todo desenvolvedor deveria saber sobre sql server5 coisas que todo desenvolvedor deveria saber sobre sql server
5 coisas que todo desenvolvedor deveria saber sobre sql serverMarcos Freccia
 
TDC2017 | São Paulo - Trilha Banco de Dados How we figured out we had a SRE t...
TDC2017 | São Paulo - Trilha Banco de Dados How we figured out we had a SRE t...TDC2017 | São Paulo - Trilha Banco de Dados How we figured out we had a SRE t...
TDC2017 | São Paulo - Trilha Banco de Dados How we figured out we had a SRE t...tdc-globalcode
 
Webcast: 5 coisas que todo desenvolvedor deveria saber sobre sql server
Webcast: 5 coisas que todo desenvolvedor deveria saber sobre sql server Webcast: 5 coisas que todo desenvolvedor deveria saber sobre sql server
Webcast: 5 coisas que todo desenvolvedor deveria saber sobre sql server Marcos Freccia
 

Semelhante a 14100015 introducao-oracle-sqlplsql-vol2-pt (20)

Introducao oracle-sqlplsql-vol2-pt
Introducao oracle-sqlplsql-vol2-ptIntroducao oracle-sqlplsql-vol2-pt
Introducao oracle-sqlplsql-vol2-pt
 
9i fundamentos adm_banco_de_dados_ii
9i fundamentos adm_banco_de_dados_ii9i fundamentos adm_banco_de_dados_ii
9i fundamentos adm_banco_de_dados_ii
 
Mapeamento brb 2013 em videoaulas do provas de ti google drive
Mapeamento brb 2013 em videoaulas do provas de ti   google driveMapeamento brb 2013 em videoaulas do provas de ti   google drive
Mapeamento brb 2013 em videoaulas do provas de ti google drive
 
Artc 1249307788 43
Artc 1249307788 43Artc 1249307788 43
Artc 1249307788 43
 
ESTRUTURA_DE_DADOS.pdf
ESTRUTURA_DE_DADOS.pdfESTRUTURA_DE_DADOS.pdf
ESTRUTURA_DE_DADOS.pdf
 
Banco de Dados no Visual Studio
Banco de Dados no Visual StudioBanco de Dados no Visual Studio
Banco de Dados no Visual Studio
 
Tutorialoracleformsbuilder 140813182046-phpapp01
Tutorialoracleformsbuilder 140813182046-phpapp01Tutorialoracleformsbuilder 140813182046-phpapp01
Tutorialoracleformsbuilder 140813182046-phpapp01
 
Tutorial oracle forms builder
Tutorial oracle forms builderTutorial oracle forms builder
Tutorial oracle forms builder
 
DP-900-BR-01.pptx
DP-900-BR-01.pptxDP-900-BR-01.pptx
DP-900-BR-01.pptx
 
Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...
Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...
Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...
 
Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...
Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...
Os melhores recursos novos do Oracle Database 12c para desenvolvedores e DBAs...
 
WorkshopMaxtera_RevDados_11mar15
WorkshopMaxtera_RevDados_11mar15WorkshopMaxtera_RevDados_11mar15
WorkshopMaxtera_RevDados_11mar15
 
Desenvolvimento Delphi
Desenvolvimento DelphiDesenvolvimento Delphi
Desenvolvimento Delphi
 
2006 - ADONET.ppt
2006 - ADONET.ppt2006 - ADONET.ppt
2006 - ADONET.ppt
 
Artigo data warehouse bd ii - 2015-1
Artigo data warehouse   bd ii - 2015-1Artigo data warehouse   bd ii - 2015-1
Artigo data warehouse bd ii - 2015-1
 
Artigo data warehouse bd ii - 2015-1 a
Artigo data warehouse   bd ii - 2015-1 aArtigo data warehouse   bd ii - 2015-1 a
Artigo data warehouse bd ii - 2015-1 a
 
Banco de dados
Banco de dadosBanco de dados
Banco de dados
 
5 coisas que todo desenvolvedor deveria saber sobre sql server
5 coisas que todo desenvolvedor deveria saber sobre sql server5 coisas que todo desenvolvedor deveria saber sobre sql server
5 coisas que todo desenvolvedor deveria saber sobre sql server
 
TDC2017 | São Paulo - Trilha Banco de Dados How we figured out we had a SRE t...
TDC2017 | São Paulo - Trilha Banco de Dados How we figured out we had a SRE t...TDC2017 | São Paulo - Trilha Banco de Dados How we figured out we had a SRE t...
TDC2017 | São Paulo - Trilha Banco de Dados How we figured out we had a SRE t...
 
Webcast: 5 coisas que todo desenvolvedor deveria saber sobre sql server
Webcast: 5 coisas que todo desenvolvedor deveria saber sobre sql server Webcast: 5 coisas que todo desenvolvedor deveria saber sobre sql server
Webcast: 5 coisas que todo desenvolvedor deveria saber sobre sql server
 

14100015 introducao-oracle-sqlplsql-vol2-pt

  • 1. Introdução ao Oracle: SQL e PL/SQL Guia do Estudante • Volume 2 41010BP13 Produção 1.3 Fevereiro de 2000 M08945-BP
  • 2. Autores Copyright © Oracle Corporation, 1998, 1999. Todos os direitos reservados e de titularidade da Oracle Corporation, inclusive aqueles referentes à tradução para Neena Kochhar o idioma português - Brasil. Ellen Gravina Esta documentação contém informações de propriedade da Oracle Corporation. Priya Nathan É fornecida sob um contrato de licença que contém restrições sobre seu uso e sua divulgação, sendo também protegida pela legislação de direitos autorais. Não é permitida a engenharia reversa dos programas de computador. Se esta documentação for entregue/distribuída a uma Agência do Departamento de Defesa Colaboradores Técnicos do Governo dos Estados Unidos da América do Norte, será então entregue/distribuída com Direitos Restritos e a seguinte legenda será aplicável: e Revisores Legenda de Direitos Restritos Claire Bennet Christa Miethaner O uso, duplicação ou divulgação por aquele Governo estão sujeitos às restrições Tony Hickman aplicáveis aos programas comerciais de computadores e serão considerados como programas de computador com Direitos Restritos de acordo com a legislação federal Sherin Nassa daquele Governo, conforme descrito no subparágrafo da legislação norte-americana Nancy Greenberg (c) (1) (ii) de DFARS 252.227-7013, Direitos sobre Dados Técnicos e Programas de Hazel Russell Computador (outubro de 1988). Kenneth Goetz Proibida a reprodução total ou parcial desta documentação sem a expressa Piet van Zon autorização prévia por escrito da Oracle Corporation ou da Oracle do Brasil Sistemas Ulrike Dietrich Ltda. A cópia deste material, de qualquer forma ou por qualquer meio, eletrônico, Helen Robertson mecânico ou de outra natureza, inclusive através de processos xerográficos, de Thomas Nguyen fotocópia e de gravação, constitui violação da legislação de direitos autorais e será punida civil e-ou criminalmente na forma da lei. Lisa Jansson Kuljit Jassar Se esta documentação for entregue / distribuída a uma Agência do Governo dos Estados Unidos da América do Norte que não esteja subordinada ao Departamento de Defesa, será então entregue / distribuída com "Direitos Restritos", conforme definido no FAR 52.227-14, Direitos sobre Dados - Geral, inclusive a Alternativa III Editor (junho de 1987). Jerry Brosnan As informações contidas neste documento estão sujeitas a alterações sem aviso prévio. Se você encontrar algum problema na documentação, envie a Products Education - Oracle Corporation ou a Education - Oracle do Brasil Sistemas Ltda. uma descrição de tal problema por escrito. Education Products, Oracle Corporation, 500 Oracle Parkway, Box SB-6, Redwood Shores, CA 94065. Distribuidor no Brasil: Oracle do Brasil Sistemas Ltda. Rua José Guerra, 127, São Paulo, SP - 04719-030 - Brasil CGC: 59.456.277/0001-76. A Oracle Corporation e a Oracle do Brasil Sistemas Ltda. não garantem que este documento esteja isento de erros. Oracle e todos os demais produtos Oracle citados nesta documentação são marcas comerciais ou marcas comerciais registradas da Oracle Corporation. Todos os outros nomes de produtos ou de empresas aqui mencionados o são apenas para fins de identificação e podem ser marcas comerciais registradas de seus respectivos proprietários.
  • 3. Sumário Prefácio Mapa de Curso Introdução Objetivos I-2 Ciclo de Vida de Desenvolvimento do Sistema I-3 Armazenamento de Dados em Diferentes Mídias I-5 Conceito de Banco de Dados Relacional I-6 Definição de Banco de Dados Relacional I-7 Modelos de Dados I-8 Modelo de Relacionamento de Entidades I-9 Convenções de Modelo para Relacionamento de Entidades I-11 Terminologia de Banco de Dados Relacional I-13 Relacionando Várias Tabelas I-15 Propriedades de Banco de Dados Relacional I-17 Comunicando-se com um RDBMS Usando o SQL I-18 Sistema de Gerenciamento de Banco de Dados Relacional I-19 Oracle8: Sistema de Gerenciamento de Banco de Dados Relacional de Objeto I-20 Oracle8i: Banco de Dados de Plataforma Internet para Recursos de Computação na Internet I-21 Plataforma Internet da Oracle I-23 Instruções SQL I-24 Sobre PL/SQL I-25 Ambiente PL/SQL I-26 Tabelas Usadas no Curso I-27 Sumário I-28 1 Criando Instruções SQL Básicas Objetivos 1-2 Recursos das Instruções SELECT SQL 1-3 Instrução SELECT Básica 1-4 Criando Instruções SQL 1-5 Selecionando Todas as Colunas 1-6 Selecionando Colunas Específicas 1-7 Defaults de Cabeçalho de Coluna 1-8 Expressões Aritméticas 1-9 Usando Operadores Aritméticos 1-10 iii
  • 4. Precedência do Operador 1-11 Usando Parênteses 1-13 Definindo um Valor Nulo 1-14 Valores Nulos nas Expressões Aritméticas 1-15 Definindo um Apelido de Coluna 1-16 Usando Apelidos de Coluna 1-17 Operador de Concatenação 1-18 Usando um Operador de Concatenação 1-19 Strings Literais de Caracteres 1-20 Usando Strings Literais de Caracteres 1-21 Linhas Duplicadas 1-22 Eliminando Linhas Duplicadas 1-23 Interação SQL e SQL*Plus 1-24 Instruções SQL Versus Comandos SQL*Plus 1-25 Visão Geral do SQL*Plus 1-26 Estabelecendo Login no SQL*Plus 1-27 Exibindo a Estrutura de Tabela 1-28 Comandos de Edição do SQL*Plus 1-30 Comandos de Arquivo do SQL*Plus 1-32 Sumário 1-33 Visão Geral do Exercício 1-34 2 Restringindo e Classificando Dados Objetivos 2-2 Limitando Linhas Usando uma Seleção 2-3 Limitando Linhas Selecionadas 2-4 Usando a Cláusula WHERE 2-5 Strings de Caractere e Datas 2-6 Operadores de Comparação 2-7 Usando Operadores de Comparação 2-8 Outros Operadores de Comparação 2-9 Usando o Operador BETWEEN 2-10 Usando o Operador IN 2-11 Usando o Operador LIKE 2-12 Usando o Operador IS NULL 2-14 Operadores Lógicos 2-15 Usando o Operador AND 2-16 Usando o Operador OR 2-17 Usando o Operador NOT 2-18 Regras de Precedência 2-19 Cláusula ORDER BY 2-22 iv
  • 5. Classificando em Ordem Decrescente 2-23 Classificando por Apelido de Coluna 2-24 Classificando por Várias Colunas 2-25 Sumário 2-26 Visão Geral do Exercício 2-27 3 Funções de Uma Única Linha Objetivos 3-2 Funções SQL 3-3 Dois Tipos de Funções SQL 3-4 Funções de Uma Única Linha 3-5 Funções de Caractere 3-7 Funções de Conversão de Maiúsculas e Minúsculas 3-9 Usando Funções de Conversão de Maiúsculas e Minúsculas 3-10 Funções de Manipulação de Caractere 3-11 Usando as Funções de Manipulação de Caractere 3-12 Funções Numéricas 3-13 Usando a Função ROUND 3-14 Usando a Função TRUNC 3-15 Usando a Função MOD 3-16 Trabalhando com Datas 3-17 Aritmética com Datas 3-18 Usando Operadores Aritméticos com Datas 3-19 Funções de Data 3-20 Usando Funções de Data 3-21 Funções de Conversão 3-23 Conversão Implícita de Tipo de Dados 3-24 Conversão Explícita de Tipo de Dados 3-26 Função TO_CHAR com Datas 3-29 Elementos de Modelo de Formato de Data 3-30 Usando a Função TO_CHAR com Datas 3-32 Função TO_CHAR com Números 3-33 Usando a Função TO_CHAR com Números 3-34 Funções TO_NUMBER e TO_DATE 3-35 Formato de Data RR 3-36 Função NVL 3-37 Usando a Função NVL 3-38 Função DECODE 3-39 Usando a Função DECODE 3-40 Aninhando Funções 3-42 Sumário 3-44 Visão Geral do Exercício 3-45 v
  • 6. 4 Exibindo Dados de Várias Tabelas Objetivos 4-2 Obtendo Dados de Várias Tabelas 4-3 O Que É uma Junção? 4-4 Produto Cartesiano 4-5 Gerando um Produto Cartesiano 4-6 Tipos de Junções 4-7 O Que É uma Junção Idêntica? 4-8 Recuperando Registros com Junções Idênticas 4-9 Qualificando Nomes de Coluna Ambíguos 4-10 Condições de Pesquisa Adicional Usando o Operador AND 4-11 Usando Apelidos de Tabela 4-12 Unindo Mais de Duas Tabelas 4-13 Junções Não-idênticas 4-14 Recuperando Registros com Junções Não-idênticas 4-15 Junções Externas 4-16 Usando Junções Externas 4-18 Autojunções 4-19 Unindo uma Tabela a Ela Mesma 4-20 Sumário 4-21 Visão Geral do Exercício 4-22 5 Agregando Dados Usando Funções de Grupo Objetivos 5-2 O Que São Funções de Grupo? 5-3 Tipos de Funções de Grupo 5-4 Usando Funções de Grupo 5-5 Usando Funções AVG e SUM 5-6 Usando Funções MIN e MAX 5-7 Usando a Função COUNT 5-8 Funções de Grupo e Valores Nulos 5-10 Usando a Função NVL com Funções de Grupo 5-11 Criando Grupos de Dados 5-12 Criando Grupos de Dados: Cláusula GROUP BY 5-13 Usando a Cláusula GROUP BY 5-14 Agrupando por Mais de Uma Coluna 5-16 Usando a Cláusula GROUP BY em Várias Colunas 5-17 Consultas Ilegais Usando Funções de Grupo 5-18 Excluindo Resultados do Grupo 5-20 Excluindo Resultados do Grupo: Cláusula HAVING 5-21 Usando a Cláusula HAVING 5-22 vi
  • 7. Aninhando Funções de Grupo 5-24 Sumário 5-25 Visão Geral do Exercício 5-26 6 Subconsultas Objetivos 6-2 Usando uma Subconsulta para Resolver um Problema 6-3 Subconsultas 6-4 Usando uma Subconsulta 6-5 Diretrizes para o Uso de Subconsultas 6-6 Tipos de Subconsultas 6-7 Subconsultas de uma Única Linha 6-8 Executando Subconsultas de uma Única Linha 6-9 Usando Funções de Grupo em uma Subconsulta 6-10 Cláusula HAVING com Subconsultas 6-11 O Que Há de Errado com esta Instrução? 6-12 Esta Instrução Irá Funcionar? 6-13 Subconsultas de Várias Linhas 6-14 Usando o Operador ANY em Subconsultas de Várias Linhas 6-15 Usando o Operador ALL em Subconsultas de Várias Linhas 6-16 Sumário 6-17 Visão Geral do Exercício 6-18 7 Subconsultas de Várias Colunas Objetivos 7-2 Subconsultas de Várias Colunas 7-3 Usando Subconsultas de Várias Colunas 7-4 Comparações de Coluna 7-6 Subconsulta de Comparação que Não Seja aos Pares 7-7 Subconsulta que Não Seja aos Pares 7-8 Valores Nulos em uma Subconsulta 7-9 Usando uma Subconsulta na Cláusula FROM 7-10 Sumário 7-11 Visão Geral do Exercício 7-12 8 Produzindo uma Saída Legível com o SQL*Plus Objetivos 8-2 Relatórios Interativos 8-3 Variáveis de Substituição 8-4 Usando a Variável de Substituição & 8-5 Usando o Comando SET VERIFY 8-6 Valores de Caractere e Data com Variáveis de Substituição 8-7 vii
  • 8. Especificando Nomes de Coluna, Expressões e Texto no Tempo de Execução 8-8 Usando a Variável de Substituição && 8-10 Definindo as Variáveis de Usuário 8-11 O Comando ACCEPT 8-12 Usando o Comando ACCEPT 8-13 Comandos DEFINE e UNDEFINE 8-14 Usando o Comando DEFINE 8-15 Personalizando o Ambiente SQL*Plus 8-16 Variáveis do Comando SET 8-17 Salvando as Personalizações no Arquivo login.sql 8-18 Comandos de Formato do SQL*Plus 8-19 O Comando COLUMN 8-20 Usando o Comando COLUMN 8-21 Modelos de Formato COLUMN 8-22 Usando o Comando BREAK 8-23 Usando os Comandos TTITLE e BTITLE 8-24 Criando um Arquivo de Script para Executar um Relatório 8-25 Exemplo de Relatório 8-27 Sumário 8-28 Visão Geral do Exercício 8-29 9 Manipulação de Dados Objetivos 9-2 DML (Data Manipulation Language) 9-3 Adicionando uma Nova Linha em uma Tabela 9-4 A Instrução INSERT 9-5 Inserindo Novas Linhas 9-6 Inserindo Linhas com Valores Nulos 9-7 Inserindo Valores Especiais 9-8 Inserindo Valores Espec'ificos de Data 9-9 Inserindo Valores Usando Variáveis de Substituição 9-10 Criando um Script com Prompts Personalizados 9-11 Copiando Linhas a partir de Outra Tabela 9-12 Alterando os Dados em uma Tabela 9-13 A Instrução UPDATE 9-14 Atualizando Linhas em uma Tabela 9-15 Atualizando com Subconsulta de Várias Colunas 9-16 Atualizando Linhas Baseadas em Outra Tabela 9-17 Atualizando Linhas: Erro de Restrição de Integridade 9-18 Removendo uma Linha de uma Tabela 9-19 A Instrução DELETE 9-20 viii
  • 9. Deletando Linhas de uma Tabela 9-21 Deletando Linhas Baseadas em Outra Tabela 9-22 Deletando Linhas: Erro de Restrição de Integridade 9-23 Transações de Banco de Dados 9-24 Vantagens das Instruções COMMIT e ROLLBACK 9-26 Controlando Transações 9-27 Processando Transações Implícitas 9-28 Estado dos Dados Antes do COMMIT ou ROLLBACK 9-29 Estado dos Dados Após COMMIT 9-30 Submetendo Dados a Commit 9-31 Estado dos Dados Após ROLLBACK 9-32 Fazendo Roll Back de Alterações para um Marcador 9-33 Rollback no Nível da Instrução 9-34 Consistência na Leitura 9-35 Implementação da Consistência na Leitura 9-36 Bloqueando 9-37 Sumário 9-38 Visão Geral do Exercício 9-39 10 Criando e Gerenciando Tabelas Objetivos 10-2 Objetos do Banco de Dados 10-3 Convenções para Nomeação 10-4 A Instrução CREATE TABLE 10-5 Fazendo Referência a Tabelas de Outro Usuário 10-6 A Opção DEFAULT 10-7 Criando Tabelas 10-8 Tabelas no Banco de Dados Oracle 10-9 Consultando o Dicionário de Dados 10-10 Tipos de Dados 10-11 Criando uma Tabela Usando uma Subconsulta 10-13 A Instrução ALTER TABLE 10-15 Adicionando uma Coluna 10-16 Modificando uma Coluna 10-18 Eliminando uma Coluna 10-19 Opção SET UNUSED 10-20 Eliminando uma Tabela 10-22 Alterando o Nome de um Objeto 10-23 Truncando uma Tabela 10-24 Adicionando Comentários a uma Tabela 10-25 Sumário 10-26 Visão Geral do Exercício 10-27 ix
  • 10. 11 Incluindo Restrições Objetivos 11-2 O Que São Restrições? 11-3 Diretrizes sobre Restrições 11-4 Definindo Restrições 11-5 A Restrição NOT NULL 11-7 A Restrição UNIQUE KEY 11-9 A Restrição PRIMARY KEY 11-11 A Restrição FOREIGN KEY 11-13 Palavras-chave da Restrição FOREIGN KEY 11-15 A Restrição CHECK 11-16 Adicionando uma Restrição 11-17 Eliminando uma Restrição 11-19 Desativando Restrições 11-20 Ativando Restrições 11-21 Restrições em Cascata 11-22 Verificando Restrições 11-24 Verificando Colunas Associadas com Restrições 11-25 Sumário 11-26 Visão Geral do Exercício 11-27 12 Criando Views Objetivos 12-2 Objetos de Banco de Dados 12-4 O Que É uma View? 12-5 Por Que Usar Views? 12-6 Views Simples e Views Complexas 12-7 Criando uma View 12-8 Recuperando Dados de uma View 12-11 Consultando uma View 12-12 Modificando uma View 12-13 Criando uma View Complexa 12-14 Regras para Executar Operações DML em uma View 12-15 Usando a Cláusula WITH CHECK OPTION 12-17 Negando Operações DML 12-18 Removendo uma View 12-19 Views Em Linha 12-20 Análise "Top-N” 12-21 Executando a Análise “Top-N” 12-22 Exemplo de Análise “Top-N” 12-23 Sumário 12-24 Visão Geral do Exercício 12-26 x
  • 11. 13 Outros Objetos do Banco de Dados Objetivos 13-2 Objetos do Banco de Dados 13-3 O Que É uma Seqüência? 13-4 A Instrução CREATE SEQUENCE 13-5 Criando uma Seqüência 13-7 Confirmando Seqüências 13-8 Pseudocolunas NEXTVAL e CURRVAL 13-9 Usando uma Seqüência 13-11 Modificando uma Seqüência 13-13 Diretrizes para Modificar uma Seqüência 13-14 Removendo uma Seqüência 13-15 O Que É um Índice? 13-16 Como os Índices são Criados? 13-17 Criando um Índice 13-18 Quando Criar um Índice 13-19 Quando Não Criar um Índice 13-20 Confirmando Índices 13-21 Índices Baseados em Função 13-22 Removendo um Índice 13-23 Sinônimos 13-24 Criando e Removendo Sinônimos 13-25 Sumário 13-26 Visão Geral do Exercício 13-27 14 Controlando o Acesso do Usuário Objetivos 14-2 Controlando o Acesso do Usuário 14-3 Privilégios 14-4 Privilégios de Sistema 14-5 Criando Usuários 14-6 Privilégios de Sistema de Usuário 14-7 Concedendo Privilégios de Sistema 14-8 O Que É uma Função? 14-9 Criando e Concedendo Privilégios a uma Função 14-10 Alterando Sua Senha 14-11 Privilégios de Objeto 14-12 Concedendo Privilégios de Objeto 14-14 Usando as Palavras-chave WITH GRANT OPTION e PUBLIC 14-15 Confirmando Privilégios Concedidos 14-16 Como Revogar Privilégios de Objeto 14-17 xi
  • 12. Revogando Privilégios de Objeto 14-18 Sumário 14-19 Visão Geral do Exercício 14-20 15 SQL Workshop Visão Geral do Workshop 15-2 16 Declarando Variáveis Objetivos 16-2 Sobre PL/SQL 16-3 Benefícios da Linguagem PL/SQL 16-4 Estrutura de Bloco PL/SQL 16-6 Tipos de Bloco 16-8 Construções de Programa 16-9 Uso de Variáveis 16-11 Tratando Variáveis em PL/SQL 16-12 Tipos de Variáveis 16-13 Declarando Variáveis PL/SQL 16-16 Regras para Nomeação 16-18 Atribuindo Valores às Variáveis 16-19 Palavras-chave e Inicialização de Variáveis 16-20 Tipos de Dados Escalares 16-22 Tipos de Dados Escalares Básicos 16-23 Declarando Variáveis Escalares 16-25 O Atributo %TYPE 16-26 Declarando Variáveis com o Atributo %TYPE 16-27 Declarando Variáveis Booleanas 16-28 Estrutura de Registro PL/SQL 16-29 Variáveis de Tipo de Dados LOB 16-30 Variáveis de Ligação 16-31 Referenciando Variáveis Não-PL/SQL 16-33 DBMS_OUTPUT.PUT_LINE 16-34 Sumário 16-35 Visão Geral do Exercício 16-37 17 Criando Instruções Executáveis Objetivos 17-2 Diretrizes e Sintaxe de Bloco PL/SQL 17-3 Comentando Código 17-6 Funções SQL em PL/SQL 17-7 Funções PL/SQL 17-8 Conversão de Tipo de Dados 17-9 xii
  • 13. Blocos Aninhados e Escopo de Variável 17-11 Operadores em PL/SQL 17-14 Usando Variáveis de Ligação 17-16 Diretrizes de Programação 17-17 Convenções para Nomeação de Código 17-18 Endentando o Código 17-19 Determinando o Escopo da Variável 17-20 Sumário 17-21 Visão Geral do Exercício 17-22 18 Interagindo com o Oracle Server Objetivos 18-2 Instruções SQL em PL/SQL 18-3 Instruções SELECT em PL/SQL 18-4 Recuperando Dados em PL/SQL 18-6 Manipulando Dados Usando o PL/SQL 18-8 Inserindo Dados 18-9 Atualizando Dados 18-10 Deletando Dados 18-11 Convenções para Nomeação 18-12 Instruções COMMIT e ROLLBACK 18-14 Cursor SQL 18-15 Atributos do Cursor SQL 18-16 Sumário 18-18 Visão Geral do Exercício 18-20 19 Criando Estruturas para Controle Objetivos 19-2 Controlando o Fluxo de Execução PL/SQL 19-3 Instruções IF 19-4 Instruções IF Simples 19-5 Fluxo de Execução da Instrução IF-THEN-ELSE 19-6 Instruções IF-THEN-ELSE 19-7 Fluxo de Execução da Instrução IF-THEN-ELSIF 19-8 Instruções IF-THEN-ELSIF 19-9 Elaborando Condições Lógicas 19-10 Tabelas Lógicas 19-11 Condições Booleanas 19-12 Controle Iterativo: Instruções LOOP 19-13 Loop Básico 19-14 Loop FOR 19-16 xiii
  • 14. Loop WHILE 19-19 Loops e Labels Alinhados 19-21 Sumário 19-23 Visão Geral do Exercício 19-24 20 Trabalhando com Tipos de Dados Compostos Objetivos 20-2 Tipos de Dados Compostos 20-3 Registros PL/SQL 20-4 Criando um Registro PL/SQL 20-5 Estrutura de Registro PL/SQL 20-7 O Atributo %ROWTYPE 20-8 Vantagens de Usar %ROWTYPE 20-9 O Atributo %ROWTYPE 20-10 Tabelas PL/SQL 20-11 Criando uma Tabela PL/SQL 20-12 Estrutura de Tabela PL/SQL 20-13 Criando uma Tabela PL/SQL 20-14 Usando Métodos de Tabela PL/SQL 20-15 Tabela de Registros PL/SQL 20-16 Exemplo de Tabela de Registros PL/SQL 20-17 Sumário 20-18 Visão Geral do Exercício 20-19 21 Criando Cursores Explícitos Objetivos 21-2 Sobre os Cursores 21-3 Funções do Cursor Explícito 21-4 Controlando Cursores Explícitos 21-5 Declarando o Cursor 21-7 Abrindo o Cursor 21-9 Extraindo Dados do Cursor 21-11 Fechando o Cursor 21-13 Atributos do Cursor Explícito 21-14 Controlando Várias Extrações 21-15 O Atributo %ISOPEN 21-16 Os Atributos %NOTFOUND e %ROWCOUNT 21-17 Cursores e Registros 21-19 Loops FOR de Cursor 21-20 Loops FOR do Cursor Usando Subconsultas 21-22 Sumário 21-23 Visão Geral do Exercício 21-25 xiv
  • 15. 22 Conceitos de Cursor Explícito Avançados Objetivos 22-2 Cursores com Parâmetros 22-3 A Cláusula FOR UPDATE 22-5 A Cláusula WHERE CURRENT OF 22-7 Cursores com Subconsultas 22-9 Sumário 22-10 Visão Geral do Exercício 22-11 23 Tratando Exceções Objetivos 23-2 Tratando Exceções com Código PL/SQL 23-3 Tratando Exceções 23-4 Tipos de Exceção 23-5 Capturando Exceções 23-6 Diretrizes para a Captura de Exceções 23-7 Capturando Erros Predefinidos do Oracle Server 23-8 Exceção Predefinida 23-10 Capturando Erros Não Predefinidos do Oracle Server 23-11 Erro Não Predefinido 23-12 Funções para Captura de Exceções 23-13 Capturando Exceções Definidas pelo Usuário 23-15 Exceção Definida pelo Usuário 23-16 Ambientes de Chamada 23-17 Propagando Exceções 23-18 Procedimento RAISE_APPLICATION_ERROR 23-19 Sumário 23-21 Visão Geral do Exercício 23-22 A Soluções de Exercícios B Descrições da Tabela e Dados Índice xv
  • 16. xvi
  • 17. 14 Controlando o Acesso do Usuário Copyright  Oracle Corporation, 1999. Todos os direitos reservados.
  • 18. Objetivos Depois de completar esta lição, você poderá fazer o seguinte: • Criar usuários • Criar funções para facilitar a configuração e manutenção do modelo de segurança • Usar as instruções GRANT e REVOKE para conceder e revogar os privilégios de objeto 14-2 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Objetivo da Lição Nesta lição, você aprenderá como controlar o acesso de banco de dados a objetos específicos e adicionar novos usuários com diferentes níveis de privilégio de acesso. Introdução ao Oracle: SQL e PL/SQL 14-2
  • 19. Controlando o Acesso do Usuário Administrador do banco de dados Privilégios de usuário e senha Usuários 14-3 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Controlando o Acesso do Usuário Em um ambiente de vários usuários, você deseja manter a segurança de acesso e de uso do banco de dados. Com a segurança de banco de dados do Oracle Server, você pode: • Controlar o acesso ao banco de dados • Conceder acesso a objetos específicos no banco de dados • Confirmar privilégios concedidos e recebidos com o dicionário de dados Oracle • Criar sinônimos para os objetos de banco de dados A segurança de banco de dados pode ser classificada em duas categorias: segurança de sistema e segurança de banco de dados. A segurança de sistema cobre o acesso e o uso do banco de dados no nível de sistema como, por exemplo, nome de usuário e senha, espaço em disco alocado aos usuários e operações do sistema permitidas pelo usuário. A segurança de banco de dados cobre o acesso e o uso dos objetos de banco de dados e as ações que esses usuários possam ter sobre os objetos. Introdução ao Oracle: SQL e PL/SQL 14-3
  • 20. Privilégios • Segurança de banco de dados: – Segurança de sistema – Segurança de dados • Privilégios de sistema: Obter acesso ao banco de dados • Privilégios de objeto: Manipular o conteúdo dos objetos de banco de dados • Esquema: Coleção de objetos como, por exemplo, tabelas, views e seqüências 14-4 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Privilégios Os privilégios constituem o direito de executar instruções SQL particulares. O administrador de banco de dados é um usuário de alto nível com a habilidade de conceder aos usuários acesso ao banco de dados e aos objetos. Os usuários requerem privilégios de sistema para obter acesso aos privilégios de objeto e de banco de dados para manipular o conteúdo dos objetos no banco de dados. Também pode ser fornecido aos usuários o privilégio de conceder privilégios adicionais a outros usuários ou a funções, que são grupos nomeados de privilégios relacionados. Esquema Um esquema é uma coleção de objetos como, por exemplo, tabelas, views e seqüências. O esquema pertence a um usuário de banco de dados e tem o mesmo nome do usuário. Para obter mais informações, consulte o Oracle Server Application Developer’s Guide, Release 8, seção "Establishing a Security Policy" e Oracle Server Concepts Manual, Release 8, tópico "Database Security". Introdução ao Oracle: SQL e PL/SQL 14-4
  • 21. Privilégios de Sistema • Mais de 80 privilégios estão disponíveis. • O DBA possui privilégios de sistema de alto nível: – Criar novos usuários – Remover usuários – Remover tabelas – Fazer back up de tabelas 14-5 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Privilégios de Sistema Mais de 80 privilégios estão disponíveis para usuários e funções. Os privilégios de sistema são tipicamente fornecidos pelo administrador do banco de dados. Privilégios de DBA Típicos Privilégio de Sistema Operações Autorizadas CREATE USER Permite que o cedente crie outros usuários Oracle (um privilégio requerido para uma função DBA) DROP USER Elimina um outro usuário DROP ANY TABLE Elimina uma tabela em qualquer esquema BACKUP ANY TABLE Faz back up de tabela nos esquemas com o utilitário de exportação Introdução ao Oracle: SQL e PL/SQL 14-5
  • 22. Criando Usuários O DBA cria usuários usando a instrução CREATE USER. CREATE USER usuário IDENTIFIED BY senha; SQL> CREATE USER scott 2 IDENTIFIED BY tiger; User created. 14-6 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Criando um Usuário O DBA cria o usuário executando a instrução CREATE USER. O usuário não possui privilégios nesse ponto. O DBA pode então conceder um número de privilégios àquele usuário. Esses privilégios determinam o que o usuário pode fazer no nível de banco de dados. O slide fornece a sintaxe resumida para criar um usuário. Na sintaxe: usuário é o nome do usuário a ser criado senha especifica que o usuário deve estabelecer login com essa senha Para obter mais informações, consulte o Oracle Server SQL Reference, Release 8, "GRANT" (System Privileges and Roles) e "CREATE USER". Introdução ao Oracle: SQL e PL/SQL 14-6
  • 23. Privilégios de Sistema de Usuário • Quando o usuário for criado, o DBA poderá conceder privilégios de sistema específicos para ele. GRANT privilégio [, privilégio...] TO usuário [, usuário...]; • Um desenvolvedor de aplicação pode ter os seguintes privilégios de sistema: – CREATE SESSION – CREATE TABLE – CREATE SEQUENCE – CREATE VIEW – CREATE PROCEDURE 14-7 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Privilégios Típicos de Usuário Agora que o DBA criou um usuário, o DBA poder atribuir privilégios àquele usuário. Privilégio de Sistema Operações Autorizadas CREATE SESSION Conectar-se ao banco de dados CREATE TABLE Criar tabelas no esquema do usuário CREATE SEQUENCE Criar uma seqüência no esquema do usuário CREATE VIEW Criar uma view no esquema do usuário CREATE PROCEDURE Criar um função, pacote ou procedimento armazenado no esquema do usuário Na sintaxe: privilégio é o privilégio de sistema a ser concedido usuário é o nome do usuário Introdução ao Oracle: SQL e PL/SQL 14-7
  • 24. Concedendo Privilégios de Sistema O DBA pode conceder privilégios de sistema específicos a um usuário. SQL> GRANT create table, create sequence, create view 2 TO scott; Grant succeeded. 14-8 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Concedendo Privilégios de Sistema O DBA usa a instrução GRANT para alocar os privilégios de sistema para o usuário. Quando forem concedidos privilégios ao usuário, ele pode usá-los imediatamente. No exemplo do slide, foram atribuídos privilégios ao usuário Scott para criar tabelas, seqüências e views. Introdução ao Oracle: SQL e PL/SQL 14-8
  • 25. O Que É uma Função? Usuários Gerenciador Privilégios Alocando privilégios Alocando privilégios sem uma função com uma função 14-9 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. O Que É uma Função? Uma função é um grupo nomeado de privilégios relacionados que podem ser concedidos ao usuário. Isso faz com que a concessão e revogação de privilégios se torne mais fácil de desempenhar e manter. Um usuário pode ter acesso a várias funções e vários usuários podem ter a mesma função atribuída a eles. As funções são criadas tipicamente para uma aplicação de banco de dados. Criando e Atribuindo uma Função Primeiro, o DBA deve criar uma função. O DBA pode então atribuir privilégios e usuários às funções. Sintaxe CREATE ROLE função; onde: função é o nome da função a ser criada Agora que a função foi criada, o DBA pode usar a instrução GRANT para atribuir usuários às funções e privilégios à função. Introdução ao Oracle: SQL e PL/SQL 14-9
  • 26. Criando e Concedendo Privilégios a uma Função SQL> CREATE ROLE manager; Role created. SQL> GRANT create table, create view 2 to manager; Grant succeeded. SQL> GRANT manager to BLAKE, CLARK; Grant succeeded. 14-10 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Criando uma Função O exemplo no slide cria um gerente de função e permite que os gerentes criem tabelas e views. Ele atribui então a função de gerentes a Blake e a Clark. Agora Blake e Clark podem criar tabelas e views. Introdução ao Oracle: SQL e PL/SQL 14-10
  • 27. Alterando Sua Senha • O DBA cria a sua conta de usuário e inicializa a sua senha. • Você pode alterar sua senha usando a instrução ALTER USER. SQL> ALTER USER scott 2 IDENTIFIED BY lion; User altered. 14-11 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Alterando Sua Senha O DBA cria uma conta de usuário e inicializa uma senha para cada usuário. Você pode alterar sua senha usando a instrução ALTER USER. Sintaxe ALTER USER usuário IDENTIFIED BY senha; onde: usuário é o nome do usuário senha especifica a nova senha Embora essa instrução possa ser usada para alterar a senha, há várias outras opções. Você deve ter o privilégio ALTER USER para alterar uma opção. Para obter mais informações, consulte o Oracle Server SQL Reference, Release 8, "ALTER USER". Introdução ao Oracle: SQL e PL/SQL 14-11
  • 28. Privilégios de Objeto Privilégio de Objeto Tabela View Seqüência Procedimento ALTER √ √ DELETE √ √ EXECUTE √ INDEX √ INSERT √ √ REFERENCES √ SELECT √ √ √ UPDATE √ √ 14-12 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Privilégios de Objeto Um privilégio de objeto é um privilégio ou direito de desempenhar uma determinada ação em uma tabela, view, seqüência ou procedimento específico. Cada objeto tem um conjunto determinado de privilégios concedíveis. A tabela no slide lista os privilégios de vários objetos. Observe que apenas os privilégios que se aplicam a uma seqüência são SELECT e ALTER. UPDATE, REFERENCES e INSERT podem ser restringidos especificando-se um subconjunto das colunas atualizáveis. Um privilégio SELECT pode ser restringido criando uma view com um subconjunto de colunas e concedendo o privilégio SELECT na view. Uma concessão em um sinônimo é convertida para uma concessão na tabela base referenciada pelo sinônimo. Introdução ao Oracle: SQL e PL/SQL 14-12
  • 29. Privilégios de Objeto • Os privilégios de objeto variam de objeto para objeto. • Um proprietário tem todos os privilégios sobre o objeto. • Um proprietário pode fornecer privilégios específicos sobre o objeto de proprietário. GRANT object_priv [(colunas)] ON objeto TO {usuário|função|PUBLIC} [WITH GRANT OPTION]; 14-13 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Concedendo Privilégios de Objeto Privilégios de objeto diferentes estão disponíveis para tipos diferentes de objetos de esquema. Um usuário tem automaticamente todos os privilégios de objeto para objetos de esquema contidos no esquema do usuário. Um usuário pode conceder qualquer privilégio de objeto sobre qualquer objeto de esquema que o usuário possua para qualquer outro usuário ou função. Se a concessão incluir a instrução GRANT OPTION, o cedente pode reconceder o privilégio de objeto para outros usuários; senão, o cedente pode usar o privilégio, mas não pode concedê-lo a outros usuários. Na sintaxe: object_priv é um privilégio de objeto a ser concedido ALL especifica todos os privilégios de objeto. colunas especifica a coluna de uma tabela ou view sobre as quais os privilégios são concedidos ON objeto é o objeto sobre o qual os privilégios são concedidos TO identifica a quem o privilégio é concedido PUBLIC concede privilégios de objeto a todos os usuários WITH GRANT OPTION permite que o cedente conceda privilégios de objeto a outros usuários e funções Introdução ao Oracle: SQL e PL/SQL 14-13
  • 30. Concedendo Privilégios de Objeto • Concede privilégios de consulta na tabela EMP. SQL> GRANT select 2 ON emp 3 TO sue, rich; Grant succeeded. • Concede privilégios para atualizar colunas específicas aos usuários e funções. SQL> GRANT update (dname, loc) 2 ON dept 3 TO scott, manager; Grant succeeded. 14-14 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Diretrizes • Para conceder privilégios sobre um objeto, ele deve estar no seu próprio esquema ou você deve ter recebido os privilégios de objeto WITH GRANT OPTION. • Um proprietário de objeto pode conceder qualquer privilégio de objeto sobre o objeto para qualquer outro usuário ou função do banco de dados. • O proprietário de um objeto adquire automaticamente todos os privilégios de objeto sobre aquele objeto. O primeiro exemplo no slide concede aos usuários Sue e Rich o privilégio de consultar a tabela EMP. O segundo exemplo concede privilégios UPDATE sobre colunas específicas na tabela DEPT a Scott e à função de gerente. Se Sue ou Rich tiverem que selecionar dados da tabela emp, a sintaxe que eles terão de usar é: SQL> SELECT * 2 FROM scott.emp; Outra alternativa é criar um sinônimo para a tabela e selecionar no sinônimo. SQL> CREATE SYNONYM emp FOR scott.emp SQL> SELECT * FROM emp; Observação: Os DBAs geralmente alocam privilégios de sistema e qualquer usuário que possua um objeto pode conceder privilégios de objeto. Introdução ao Oracle: SQL e PL/SQL 14-14
  • 31. Usando palavras chave WITH GRANT OPTION e PUBLIC • Dar autoridade a um usuário para passar os privilégios. SQL> GRANT select, insert 2 ON dept 3 TO scott 4 WITH GRANT OPTION; Grant succeeded. • Permitir que todos os usuários no sistema consultem dados na tabela DEPT de Alice. SQL> GRANT select 2 ON alice.dept 3 TO PUBLIC; Grant succeeded. 14-15 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Palavra-chave WITH GRANT OPTION Um privilégio que é concedido WITH GRANT OPTION pode ser passado para outros usuários e funções pelo cedente. Os privilégios de objeto que foram concedidos WITH GRANT OPTION são revogados quando o privilégio do concessor for revogado. O exemplo no slide dá ao usuário Scott acesso à sua tabela DEPT com o privilégio de consultar a tabela e adicionar linhas a ela. O exemplo também permite que Scott conceda esse privilégio a outros. Palavra-chave PUBLIC O proprietário de uma tabela pode conceder acesso a todos os usuários usando a palavra-chave PUBLIC. O segundo exemplo permite que todos os usuários no sistema consultem dados na tabela DEPT de Alice. Introdução ao Oracle: SQL e PL/SQL 14-15
  • 32. Confirmando Privilégios Concedidos Tabela de Dicionário de Dados Descrição ROLE_SYS_PRIVS Privilégios de sistema concedidos a funções ROLE_TAB_PRIVS Privilégios de tabela concedidos a funções USER_ROLE_PRIVS Funções acessíveis ao usuário USER_TAB_PRIVS_MADE Os privilégios de objeto concedidos aos objetos do usuário USER_TAB_PRIVS_RECD Os privilégios de objeto concedidos ao usuário USER_COL_PRIVS_MADE Os privilégios de objeto concedidos às colunas dos objetos do usuário USER_COL_PRIVS_RECD Os privilégios de objeto concedidos ao usuário em colunas específicas 14-16 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Confirmando Privilégios Concedidos Se você tentar executar uma operação não autorizada — por exemplo, deletar uma linha de uma tabela para a qual você não tem o privilégio DELETE — o Oracle Server não permitirá que a operação ocorra. Se você receber a mensagem de erro "tabela ou view não existe" ( "table or view does not exist" do Oracle Server, você poderá ter: • Nomeado uma tabela ou view que não existe • Tentado executar uma operação em uma tabela ou view para a qual você não tem o privilégio apropriado Você pode acessar os dicionários de dados para ver os privilégios que você tem. A tabela no slide descreve várias tabelas de dicionários de dados. Introdução ao Oracle: SQL e PL/SQL 14-16
  • 33. Como Revogar Privilégios de Objeto • Use a instrução REVOKE para revogar os privilégios concedidos a outros usuários. • Os privilégios concedidos a outros usuários por WITH GRANT OPTION também serão revogados. REVOKE {privilégio [, privilégio...]|ALL} ON objeto FROM {usuário[, usuário...]|função|PUBLIC} [CASCADE CONSTRAINTS]; 14-17 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Revogando Privilégios de Objeto A remoção de privilégios concedidos a outros usuários usando a instrução REVOKE. Quando você usa a instrução REVOKE, os privilégios que você especificar são revogados dos usuários que você nomear e dos outros usuários para quem esses privilégios foram concedidos pela cláusula WITH GRANT OPTION. Na sintaxe: CASCADE é obrigatório para remover quaisquer restrições de integridade feitas ao CONSTRAINTS objeto por meio do privilégio REFERENCES Para obter mais informações, consulte o Oracle Server SQL Reference, Release 8, "REVOKE". Introdução ao Oracle: SQL e PL/SQL 14-17
  • 34. Revogando Privilégios de Objeto Assim como a usuária Alice, revogue os privilégios SELECT e INSERT fornecidos ao usuário Scott na tabela DEPT. SQL> REVOKE select, insert 2 ON dept 3 FROM scott; Revoke succeeded. 14-18 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Revogando Privilégios de Objeto (continuação) O exemplo no slide revoga os privilégios SELECT e INSERT concedidos ao usuário Scott na tabela DEPT. Observação: Se um usuário obtiver o privilégio WITH GRANT OPTION, ele também poderá conceder o privilégio WITH GRANT OPTION para que uma longa corrente de cedentes seja possível, mas não são permitidas concessões circulares. Se um proprietário revogar um privilégio de um usuário que concedeu o mesmo privilégio a outros usuários, a instrução REVOKE se aplicará também aos outros usuários. Por exemplo, se um usuário A concede o privilégio SELECT em uma tabela ao usuário B incluindo WITH GRANT OPTION, o usuário B pode conceder ao usuário C o privilégio SELECT chamado WITH GRANT OPTION e o usuário C pode conceder ao usuário D o privilégio SELECT. Se o usuário A revoga o privilégio do usuário B, esse mesmo privilégio, concedido aos usuários C e D, são revogados. Introdução ao Oracle: SQL e PL/SQL 14-18
  • 35. Sumário Instrução Ação CREATE USER Permite que o DBA crie um usuário GRANT Permite que o usuário conceda a outros usuários privilégios para acessar os objetos do usuário CREATE ROLE Permite que o DBA crie um conjunto de privilégios ALTER USER Permite que os usuários alterem as suas senhas REVOKE Remove os privilégios sobre um objeto dos usuários 14-19 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Sumário Os DBAs estabelecem segurança de banco de dados inicial para usuários atribuindo privilégios aos outros usuários. • O DBA cria usuários que devem ter uma senha. O DBA também é responsável por estabelecer os privilégios de sistema iniciais dos usuários. • Quando o usuário tiver criado um objeto, o usuário pode passar quaisquer privilégios de objeto disponíveis a outros usuários ou para todos os usuários usando a instrução GRANT. • Um DBA pode criar funções usando a instrução CREATE ROLE para passar um conjunto de privilégios de sistema ou de objeto a vários usuários. As funções tornam a concessão e a revogação de privilégios mais fáceis de manter. • Os usuários podem alterar sua senha usando a instrução ALTER USER. • Você pode remover privilégios de usuários usando a instrução REVOKE. • As views do dicionário de dados permitem que os usuários vejam os privilégios concedidos a eles e aqueles que são concedidos sobre os seus objetos. Introdução ao Oracle: SQL e PL/SQL 14-19
  • 36. Visão Geral do Exercício • Concedendo a outros usuários privilégios sobre sua tabela • Modificando a tabela de um outro usuário através de privilégios concedidos a você • Criando um sinônimo • Consultando as views do dicionário de dados relacionados aos privilégios 14-20 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Visão Geral do Exercício Junte-se a outros alunos para este exercício de controle de acesso aos objetos de banco de dados. Introdução ao Oracle: SQL e PL/SQL 14-20
  • 37. Exercício 14 1. Qual o privilégio que um usuário deve receber para estabelecer login no Oracle Server? É um privilégio de objeto ou sistema? _____________________________________________________________________ 2. Qual o privilégio que um usuário deve receber para criar tabelas? _____________________________________________________________________ 3. Se você criar uma tabela, quem poderá passar privilégios para outros usuários sobre sua tabela? _____________________________________________________________________ 4. Você é o DBA. Você está criando muitos usuários que estão exigindo os mesmos privilégios de sistema. O que você faria para tornar seu trabalho mais fácil? _____________________________________________________________________ 5. Que comando você usa para alterar sua senha? _____________________________________________________________________ 6. Conceda acesso à tabela DEPT a outro usuário. Faça com que o usuário lhe conceda acesso de consulta à tabela DEPT dele(a). 7. Consulte todas as linhas na tabela DEPT. DEPTNO DNAME LOC ------ ---------- --------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 8. Adicione uma nova linha à tabela DEPT. A equipe 1 deve adicionar Education como o departamento número 50. A Equipe 2 deve adicionar o departamento Administration como o departamento número 50. Torne as alterações permanentes. 9. Crie um sinônimo para a tabela DEPT da outra equipe. Introdução ao Oracle: SQL e PL/SQL 14-21
  • 38. Exercício 14 (continuação) 10. Consulte todas as linhas na tabela DEPT da outra equipe, usando o sinônimo. Resultados da instrução SELECT para a Equipe 1. DEPTNO DNAME LOC ------ -------------- --------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 50 ADMINISTRATION Resultados da instrução SELECT para a Equipe 2. DEPTNO DNAME LOC ------ -------------- --------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 50 EDUCATION 11. Consulte o dicionário de dados USER_TABLES para ver as informações sobre as tabelas que você possui. TABLE_NAME ---------------- BONUS CUSTOMER DEPARTMENT DEPT DUMMY EMP EMPLOYEE ITEM MY_EMPLOYEE ORD PRICE PRODUCT SALGRADE 13 rows selected. Introdução ao Oracle: SQL e PL/SQL 14-22
  • 39. Exercício 14 (continuação) 12. Consulte a view de dicionário de dados ALL_TABLES para ver as informações sobre todas as tabelas que você pode acessar. Exclua as suas próprias tabelas. TABLE_NAME OWNER ---------- ----------- DEPT <user2> 13. Revogue o privilégio SELECT da outra equipe. Introdução ao Oracle: SQL e PL/SQL 14-23
  • 40. Introdução ao Oracle: SQL e PL/SQL 14-24
  • 41. 15 SQL Workshop Copyright  Oracle Corporation, 1999. Todos os direitos reservados.
  • 42. Visão Geral do Workshop • Criando tabelas e seqüências • Modificando dados nas tabelas • Modificando uma definição de tabela • Criando uma view • Criando scripts que contenham comandos SQL e SQL*Plus • Gerando um relatório simples 15-2 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Visão Geral do Workshop Neste workshop você estruturará um conjunto de tabelas de bancos de dados para uma aplicação de vídeo. Ao criar as tabelas, você inserirá, atualizará e deletará registros em um banco de dados de armazenamento de vídeo e gerará um relatório. O banco de dados contém apenas as tabelas essenciais. Observação: Se você quiser estruturar as tabelas, poderá executar o script buildtab.sql no SQL*Plus. Se você quiser eliminar as tabelas, poderá executar o script dropvid.sql no SQL*Plus. Você poderá então executar o script buildvid.sql no SQL*Plus para criar e povoar a tabela. Se você usar o script buildvid.sql para estruturar e povoar as tabelas, inicie com o Exercício 6b. Introdução ao Oracle: SQL e PL/SQL 15-2
  • 43. Exercício 15 1. Crie as tabelas de acordo com as tabelas de exemplo a seguir. Escolha os tipos de dados apropriados e certifique-se de adicionar restrições de integridade. a. Nome da tabela: MEMBER Column_ MEMBER_ LAST_ FIRST_NAME ADDRESS CITY PHONE JOIN_ Name ID NAME DATE Key PK Type Null/ NN,U NN NN Unique Default System Value Date Datatype Number VARCHAR2 VARCHAR2 VARCHAR2 VARCHAR2 VARCHAR2 Date Length 10 25 25 100 30 15 b. Nome da tabela: TITLE Column_ TITLE_ID TITLE DESCRIPTION RATING CATEGORY RELEASE_ Name DATE Key PK Type Null/ NN,U NN NN Unique Check G, PG, R, DRAMA, NC17, NR COMEDY, ACTION, CHILD, SCIFI, DOCUMEN TARY Datatype Number VARCHAR2 VARCHAR2 VARCHAR2 VARCHAR2 Date Length 10 60 400 4 20 Introdução ao Oracle: SQL e PL/SQL 15-3
  • 44. Exercício 15 (continuação) c. Nome da tabela: TITLE_COPY Column COPY_ID TITLE_ID STATUS Name Key PK PK,FK Type Null/ NN,U NN,U NN Unique Check AVAILABLE, DESTROYED, RENTED, RESERVED FK Ref TITLE Table FK Ref TITLE_ID Col Datatype Number Number VARCHAR2 Length 10 10 15 d. Nome da tabela: RENTAL Column BOOK_ MEMBER_ COPY_ ACT_RET_ EXP_RET_ TITLE_ Name DATE ID ID DATE DATE ID Key PK PK,FK1 PK,FK2 PK,FK2 Type Default System System Date Value Date + 2 days FK Ref MEMBER TITLE_ TITLE_ Table COPY COPY FK Ref MEMBER_ COPY_ TITLE_ID Col ID ID Datatype Date Number Number Date Date Number Length 10 10 10 Introdução ao Oracle: SQL e PL/SQL 15-4
  • 45. Exercício 15 (continuação) e. Nome da tabela: RESERVATION Column RES_ MEMBER_ TITLE_ Name DATE ID ID Key PK PK,FK1 PK,FK2 Type Null/ NN,U NN,U NN Unique FK Ref MEMBER TITLE Table FK Ref MEMBER_ID TITLE_ID Column Datatype Date Number Number Length 10 10 2. Verifique se as tabelas e as restrições foram criadas adequadamente, verificando o dicionário de dados. TABLE_NAME ----------- MEMBER RENTAL RESERVATION TITLE TITLE_COPY CONSTRAINT_NAME C TABLE_NAME ------------------------------ - -------------- MEMBER_LAST_NAME_NN C MEMBER MEMBER_JOIN_DATE_NN C MEMBER MEMBER_MEMBER_ID_PK P MEMBER RENTAL_BOOK_DATE_COPY_TITLE_PK P RENTAL RENTAL_MEMBER_ID_FK R RENTAL RENTAL_COPY_ID_TITLE_ID_FK R RENTAL RESERVATION_RESDATE_MEM_TIT_PK P RESERVATION RESERVATION_MEMBER_ID R RESERVATION RESERVATION_TITLE_ID R RESERVATION ... 17 rows selected. Introdução ao Oracle: SQL e PL/SQL 15-5
  • 46. Exercício 15 (continuação) 3. Crie seqüências para identificar exclusivamente cada linha das tabelas MEMBER e TITLE. a. Número de membro para tabela MEMBER: inicie com 101; não permita o armazenamento em cache dos valores. Nomeie a seqüência member_id_seq. b. Número de título para a tabela TITLE: inicie com 92; não permita o armazenamento em cache. Nomeie a seqüência title_id_seq. c. Verifique a existência das seqüências no dicionário de dados. SEQUENCE_NAME INCREMENT_BY LAST_NUMBER -------------- ------------ ----------- TITLE_ID_SEQ 1 92 MEMBER_ID_SEQ 1 101 4. Adicione dados às tabelas. Crie um script para cada conjunto de dados a adicionar. a. Adicione títulos de filmes à tabela TITLE . Crie um script para fornecer as informações sobre os filmes. Salve o arquivo de script como p8q4.sql. Use as seqüências para identificar exclusivamente cada título. Informe as datas de lançamento no formato DD-MON-YYYY. Lembre-se que as aspas simples devem ser tratadas com atenção em um campo de caractere. Verifique as adições. TITLE ------------------------ Willie and Christmas Too Alien Again The Glob My Day Off Miracles on Ice Soda Gang 6 rows selected. Introdução ao Oracle: SQL e PL/SQL 15-6
  • 47. Exercício 15 (continuação) Title Description Rating Category Release_date Willie and All of Willie’s friends make G CHILD 05-OCT-1995 Christmas a Christmas list for Santa, but Too Willie has yet to add his own wish list. Alien Again Yet another installation of R SCIFI 19-MAY-1995 science fiction history. Can the heroine save the planet from the alien life form? The Glob A meteor crashes near a NR SCIFI 12-AUG-1995 small American town and unleashes carnivorous goo in this classic. My Day Off With a little luck and a lot of PG COMEDY 12-JUL-1995 ingenuity, a teenager skips school for a day in New York Miracles on A six-year-old has doubts PG DRAMA 12-SEP-1995 Ice about Santa Claus, but she discovers that miracles really do exist. Soda Gang After discovering a cache of NR ACTION 01-JUN-1995 drugs, a young couple find themselves pitted against a vicious gang. Introdução ao Oracle: SQL e PL/SQL 15-7
  • 48. Exercício 15 (continuação) b. Adicione dados à tabela MEMBER. Crie um script nomeado p15q4b.sql para pedir informações aos usuários. Execute o script. Certifique-se de usar a seqüência para adicionar o membro números. First_ Name Last_Name Address City Phone Join_Date Carmen Velasquez 283 King Seattle 206-899-6666 08-MAR-1990 Street LaDoris Ngao 5 Modrany Bratislava 586-355-8882 08-MAR-1990 Midori Nagayama 68 Via Sao Paolo 254-852-5764 17-JUN-1991 Centrale Mark Quick-to- 6921 King Lagos 63-559-7777 07-APR-1990 See Way Audry Ropeburn 86 Chu Street Hong 41-559-87 18-JAN-1991 Kong Molly Urguhart 3035 Laurier Quebec 418-542-9988 18-JAN-1991 Introdução ao Oracle: SQL e PL/SQL 15-8
  • 49. Exercício 15 (continuação) c. Adicione as seguintes cópias de filmes à tabela TITLE_COPY: Observação: Obtenha os números do title_id para este exercício. Title Copy_Id Status Willie and Christmas Too 1 AVAILABLE Alien Again 1 AVAILABLE 2 RENTED The Glob 1 AVAILABLE My Day Off 1 AVAILABLE 2 AVAILABLE 3 RENTED Miracles on Ice 1 AVAILABLE Soda Gang 1 AVAILABLE d. Adicione os seguintes aluguéis à tabela RENTAL: Observação: O número de título pode ser diferente, dependendo no número de seqüência. Title_ Copy_ Member_ Id Id Id Book_date Exp_Ret_Date Act_Ret_Date 92 1 101 3 days ago 1 day ago 2 days ago 93 2 101 1 day ago 1 day from now 95 3 102 2 days ago Today 97 1 106 4 days ago 2 days ago 2 days ago Introdução ao Oracle: SQL e PL/SQL 15-9
  • 50. Exercício 15 (continuação) 5. Crie uma view nomeada TITLE_AVAIL para mostrar os títulos dos filmes e a disponibilidade de cada cópia e a data esperada de devolução, caso esteja alugado. Consulte todas as linhas a partir da view. Ordene os resultados por título. TITLE COPY_ID STATUS EXP_RET_D ------------------ ------- ---------- ------------ Alien Again 1 AVAILABLE Alien Again 2 RENTED 05-NOV-97 Miracles on Ice 1 AVAILABLE My Day Off 1 AVAILABLE My Day Off 2 AVAILABLE My Day Off 3 RENTED 06-NOV-97 Soda Gang 1 AVAILABLE 04-NOV-97 The Glob 1 AVAILABLE Willie and Christmas Too 1 AVAILABLE 05-NOV-97 9 rows selected. 6. Faça alterações nos dados das tabelas. a. Adicione um novo título. O filme se chama "Interstellar Wars", que tem censura PG e é classificado como ficção científica. O data de lançamento é 07-JUL-77. A descrição é filme de ação "Futuristic interstellar action movie. Can the rebels save the humans from the evil empire?" Certifique-se de adicionar um registro da cópia do título para as duas cópias. b. Informe duas reservas. Uma reserva é para Carmen Velasquez, que deseja alugar "Interstellar Wars". Outra é para Mark Quick-to-See, que deseja alugar "Soda Gang". Introdução ao Oracle: SQL e PL/SQL 15-10
  • 51. Exercício 15 (continuação) c. A cliente Carmen Velasquez aluga a cópia 1 do filme "Interstellar Wars". Remova a sua reserva do filme. Registre as informações sobre o aluguel. Autorize o valor padrão da data de devolução estimada a ser usado. Verifique se o aluguel foi registrado usando a view que você criou. TITLE COPY_ID STATUS EXP_RET_D ----------------------- ------- --------- ---------------- Alien Again 1 AVAILABLE Alien Again 2 RENTED 05-NOV-97 Interstellar Wars 1 RENTED 08-NOV-97 Interstellar Wars 2 AVAILABLE Miracles on Ice 1 AVAILABLE My Day Off 1 AVAILABLE My Day Off 2 AVAILABLE My Day Off 3 RENTED 06-NOV-97 Soda Gang 1 AVAILABLE 04-NOV-97 The Glob 1 AVAILABLE Willie and Christmas Too 1 AVAILABLE 05-NOV-97 11 rows selected. 7. Faça uma modificação em uma das tabelas. a. Adicione uma coluna PRICE à tabela TITLE para registrar o preço de compra o vídeo. A coluna deve ter um comprimento total de oito registros e duas casas decimais. Verifique as modificações. Name Null? Type -------------- --------- ----- TITLE_ID NOT NULL NUMBER(10) TITLE NOT NULL VARCHAR2(60) DESCRIPTION NOT NULL VARCHAR2(400) RATING VARCHAR2(4) CATEGORY VARCHAR2(20) RELEASE_DATE DATE PRICE NUMBER(8,2) Introdução ao Oracle: SQL e PL/SQL 15-11
  • 52. Exercício 15 (continuação) b. Crie um script denominado p15q7b.sql para atualizar cada vídeo com o preço de acordo com a lista a seguir. Observação: Obtenha os title_id numbers para este exercício. Title Price Willie and Christmas Too 25 Alien Again 35 The Glob 35 My Day Off 35 Miracles on Ice 30 Soda Gang 35 Interstellar Wars 29 c. Certifique-se de que no futuro todos os títulos contenham um preço. Verifique a restrição. CONSTRAINT_NAME C SEARCH_CONDITION ------------------ -- ----------------- TITLE_PRICE_NN C PRICE IS NOT NULL 8. Crie um relatório intitulado Relatório Histórico de Cliente. Esse relatório conterá o histórico de aluguel de vídeos de cada cliente. Certifique-se de incluir o nome do cliente, o filme alugado, as datas e a duração do aluguel. Número total de aluguéis de todos os clientes no período de criação do relatório. Salve o script em um arquivo nomeado p15q8.sql. MEMBER TITLE BOOK_DATE DURATION ---------------- ------------------------ --------- -------- Carmen Velasquez Willie and Christmas Too 03-NOV-97 1 Alien Again 09-AUG-98 Interstellar Wars 10-AUG-98 LaDoris Ngao My Day Off 08-AUG-98 Molly Urguhart Soda Gang 06-AUG-98 2 Introdução ao Oracle: SQL e PL/SQL 15-12
  • 53. 16 Declarando Variáveis Copyright  Oracle Corporation, 1999. Todos os direitos reservados.
  • 54. Objetivos Depois de completar esta lição, você poderá fazer o seguinte: • Listar os benefícios do código PL/SQL • Reconhecer o bloco PL/SQL básico e suas seções • Descrever o significado das variáveis no código PL/SQL • Declarar Variáveis PL/SQL • Executar o bloco PL/SQL 16-2 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Objetivo da Lição Esta lição apresenta as regras e estruturas básicas para criação e execução dos blocos de códigos PL/SQL. Ela também mostra como declarar variáveis e atribuir tipos de dados a elas. Introdução ao Oracle: SQL e PL/SQL 16-2
  • 55. Sobre PL/SQL • A linguagem PL/SQL é uma extensão da linguagem SQL com recursos de design de linguagens de programação. • As instruções de consulta e a manipulação de dados em SQL estão incluídas nas unidades procedurais de código. 16-3 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Sobre PL/SQL A linguagem PL/SQL (Procedural Language/SQL) é uma extensão de linguagem procedural da Oracle Corporation para SQL, a linguagem de acesso a dados padrão para bancos de dados relacionais. A linguagem PL/SQL oferece recursos de engenharia de software modernos, como, por exemplo, a encapsulação de dados, o tratamento de exceções, a ocultação de informações e a orientação a objeto, etc., trazendo os recursos de programação mais modernos para o Oracle Server e o Toolset. A linguagem PL/SQL incorpora muitos recursos avançados criados em linguagens de programação projetadas durante as décadas de 70 e 80. Além de aceitar a manipulação de dados, ele também permite que as instruções de consulta da linguagem SQL sejam incluídas em unidades procedurais de código e estruturadas em blocos, tornando a linguagem SQL uma linguagem avançada de processamento de transações. Com a linguagem PL/SQL, você pode usar as instruções SQL para refinar os dados do Oracle e as instruções de controle PL/SQL para processar os dados. Introdução ao Oracle: SQL e PL/SQL 16-3
  • 56. Benefícios da Linguagem PL/SQL Integração Aplicação Biblioteca Oracle Server compartilhada 16-4 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Integração A linguagem PL/SQL desempenha um papel central tanto para o Oracle Server (através de procedimentos armazenados, funções armazenadas, gatilhos de banco de dados e pacotes) quanto para as ferramentas de desenvolvimento Oracle (através de gatilhos de componente do Oracle Developer). As aplicações do Oracle Developer fazem uso das bibliotecas compartilhadas que armazenam código (procedimentos e funções) e que podem ser acessadas local ou remotamente. O Oracle Developer consiste no Oracle Forms, Oracle Reports e Oracle Graphics. Os tipos de dados SQL também podem ser usados no código PL/SQL. Combinados com o acesso direto que a linguagem SQL fornece, esses tipos de dados compartilhados integram a linguagem PL/SQL com o dicionário de dados do Oracle Server. A linguagem PL/SQL une o acesso conveniente à tecnologia de banco de dados com a necessidade de capacidade de programação procedural. PL/SQL nas Ferramentas Oracle Várias ferramentas Oracle, inclusive o Oracle Developer, têm o seu próprio mecanismo PL/SQL, o qual é independente do mecanismo presente no Oracle Server. O mecanismo filtra as instruções SQL e as envia individualmente ao executor da instrução SQL no Oracle Server. Ele processa as instruções procedurais restantes no executor da instrução procedural, que está no mecanismo PL/SQL. O executor da instrução procedural processa os dados que são locais para a aplicação (que já estão no ambiente do cliente, em vez de estarem no banco de dados). Isso reduz o trabalho enviado ao Oracle Server e o número de cursores de memória necessários. Introdução ao Oracle: SQL e PL/SQL 16-4
  • 57. Benefícios da Linguagem PL/SQL Melhorar desempenho SQL SQL Outros Aplicação SQL DBMSs SQL SQL IF...THEN SQL Oracle com Aplicação ELSE PL/SQL SQL END IF; SQL 16-5 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Desempenho Melhorado A linguagem PL/SQL pode melhorar o desempenho de uma aplicação. Os benefícios diferem dependendo do ambiente de execução. • A linguagem PL/SQL pode ser usado para agrupar as instruções SQL em um único bloco e enviar esse bloco inteiro para o servidor em uma única chamada, reduzindo assim o tráfego da rede. Sem o código PL/SQL, as instruções SQL seriam enviadas ao Oracle Server uma de cada vez. Cada instrução SQL resulta em uma outra chamada do Oracle Server e uma maior sobrecarga de desempenho. Em um ambiente de rede, a sobrecarga pode se tornar significativa. Como ilustra o slide, se sua aplicação for SQL intensiva, você pode usar os subprogramas e blocos PL/SQL para agrupar as instruções SQL antes de enviá-las ao Oracle Server para execução. • A linguagem PL/SQL também pode cooperar com as ferramentas de desenvolvimento de aplicação do Oracle Server como, por exemplo, Oracle Developer Forms e Reports. Ao adicionar recursos de processamento procedural a essas ferramentas, a linguagem PL/SQL aumenta o desempenho. Observação: Os procedimentos e as funções declaradas como parte de uma aplicação do Developer são distintos daqueles armazenados no banco de dados, embora as suas estruturas gerais sejam as mesmas. Os subprogramas armazenados são objetos de banco de dados e estão armazenados no dicionário de dados. Eles podem ser acessados por qualquer número de aplicações, incluindo as aplicações do Developer. Introdução ao Oracle: SQL e PL/SQL 16-5
  • 58. Estrutura de Bloco PL/SQL • DECLARE – Opcional Variáveis, cursores, exceções definidas pelo usuário • BEGIN – Obrigatório – Instruções SQL – Instruções PL/SQL • EXCEPTION – Opcional Ações a serem desempenhadas quando DECLARE ocorrem erros • END; – Obrigatório BEGIN EXCEPTION END; 16-6 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Estrutura de Bloco PL/SQL A linguagem PL/SQL é uma linguagem estruturada em blocos, o que significa que os programas podem ser divididos em blocos lógicos. Um bloco PL/SQL consiste em até três seções: declarativa (opcional), executável (necessária) e tratamento de exceção (opcional). Apenas as palavras-chave BEGIN e END são necessárias. Você poderá declarar variáveis localmente para o bloco que as usa. As condições de erro (conhecidas como exceções) podem ser tratadas especificamente no bloco aos quais elas se aplicam. Você poderá armazenar e alterar os valores em um bloco PL/SQL declarando e referenciando variáveis e outros identificadores. A tabela a seguir descreve as três seções de bloco: Seção Descrição Inclusão Declarativa Contém todas as variáveis, constantes, cursores e Opcional exceções definidas pelo usuário que são referenciadas nas seções executável e declarativa Executável Contém instruções SQL para manipular dados no Obrigatória banco de dados e instruções PL/SQL para manipular dados no bloco Tratamento de Especifica as ações a desempenhar quando erros e Opcional exceção condições anormais surgem na seção executável Introdução ao Oracle: SQL e PL/SQL 16-6
  • 59. Estrutura de Bloco PL/SQL DECLARE v_variable VARCHAR2(5); BEGIN SELECT column_name INTO v_variable FROM table_name; EXCEPTION WHEN exception_name THEN DECLARE ... END; BEGIN EXCEPTION END; 16-7 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Executando Instruções e Blocos PL/SQL a partir do Código SQL*Plus • Coloque um ponto-e-vírgula (;) no final de uma instrução SQL ou instrução de controle PL/SQL. • Use uma barra (/) para executar o bloco anônimo PL/SQL no buffer de SQL*Plus. Quando o bloco for executado corretamente, sem erros que não possam ser tratados, a saída de mensagem deverá ser a seguinte: PL/SQL procedure successfully completed (Procedimento PL/SQL concluído corretamente) • Coloque um ponto (.) para fechar um buffer de SQL*Plus. Um bloco PL/SQL é tratado como uma instrução contínua no buffer e os ponto-e-vírgulas no bloco não fecham ou executam o buffer. Observação: Em PL/SQL, um erro é chamado de exceção. As palavras-chave de seção DECLARE, BEGIN e EXCEPTION não são seguidas por ponto-e- vírgulas. Entretanto, END e todas as outras instruções PL/SQL necessitam de um ponto-e-vírgula para terminar a instrução. Você poderá criar uma string de instruções na mesma linha, mas esse método não é recomendado pela clareza ou edição. Introdução ao Oracle: SQL e PL/SQL 16-7
  • 60. Tipos de Bloco Anônimo Procedimento Função [DECLARE] PROCEDURE name FUNCTION name IS RETURN datatype IS BEGIN BEGIN BEGIN --statements --statements --statements RETURN value; [EXCEPTION] [EXCEPTION] [EXCEPTION] END; END; END; 16-8 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Tipos de Bloco Toda unidade PL/SQL compreende um ou mais blocos. Esses blocos podem ser inteiramente separados ou aninhados um dentro do outro. As unidades básicas (procedimentos e funções, também conhecidas como subprogramas e blocos anônimos) que compõem um programa PL/SQL são blocos lógicos, os quais podem conter qualquer número de sub-blocos aninhados. Por isso, um bloco pode representar uma pequena parte de um outro bloco, o qual, por sua vez pode ser parte da unidade de código inteira. Dos dois tipos de construções PL/SQL disponíveis, blocos anônimos e subprogramas, apenas os blocos anônimos são abordados neste curso. Blocos Anônimos Os blocos anônimos são blocos sem nome. Eles são declarados em um ponto do aplicativo onde eles devem ser executados e são passados para o mecanismo PL/SQL para serem executados em tempo de execução. Você poderá incorporar um bloco anônimo em um programa pré-compilador e em SQL*Plus ou Server Manager. Os gatilhos nos componentes do Oracle Developer consistem nesses blocos. Subprogramas Os subprogramas são blocos PL/SQL nomeados que podem assumir parâmetros e podem ser chamados. Você pode declará-los como procedimentos ou como funções. Geralmente, você deve usar um procedimento para desempenhar uma ação e uma função para calcular um valor. Você poderá armazenar subprogramas no servidor ou no nível de aplicação. Ao usar os componentes do Oracle Developer (Forms, Relatórios e Gráficos), você poderá declarar os procedimentos e funções como parte da aplicação (um form ou relatório) e chamá-los a partir de outros procedimentos, funções e gatilhos (veja a próxima página) na mesma aplicação sempre que necessário. Observação: Uma função é similar a um procedimento, exceto que uma função deve retornar um valor. Os procedimentos e funções são abordados no próximo curso sobre PL/SQL. Introdução ao Oracle: SQL e PL/SQL 16-8
  • 61. Construções de Programa Procedimento/ Bloco função anônimo armazenado(a) DECLARE BEGIN Procedimento/ Gatilho função de aplicação de aplicação EXCEPTION Gatilho de END; Procedimento/ banco de função dados em pacote 16-9 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Construções de Programa A tabela a seguir descreve em linhas gerais uma variedade de construções de programa PL/SQL que usam o bloco PL/SQL básico. Eles estão disponíveis de acordo com o ambiente no qual eles são executados. Construção de Programa Descrição Disponibilidade Bloco anônimo O bloco PL/SQL não nomeado é incorporado Todos os ambientes PL/SQL em uma aplicação ou é emitido interativamente Função ou O bloco PL/SQL nomeado armazenado no Oracle Server procedimento Oracle Server que pode aceitar parâmetros e armazenado pode ser chamado repetidamente pelo nome Função ou O bloco PL/SQL nomeado armazenado na Componentes do Oracle procedimento de aplicação Oracle Developer ou na biblioteca Developer — por exemplo, aplicação compartilhada que pode aceitar parâmetros e Forms pode ser chamado repetidamente pelo nome Pacote Módulo PL/SQL nomeado que agrupa Componentes do Oracle Server e procedimentos, funções e identificadores Oracle Developer — por relacionados exemplo, Forms Introdução ao Oracle: SQL e PL/SQL 16-9
  • 62. Construções de Programa Stored Procedimento/ Anonymous Bloco procedure/ função block anônimo armazenado(a) DECLARE function BEGIN Application Procedimento/ Application Gatilho procedure/ função detrigger aplicação de aplicação function EXCEPTION Gatilho de END; Packaged Procedimento/ Database banco de procedure/ função trigger em pacote dados function 16-10 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Construções de Programa (continuação) Construção de Programa Descrição Disponibilidade Gatilho de banco O bloco PL/SQL que é associado com uma Oracle Server de dados tabela de banco de dados e que é acionado automaticamente quando disparado pela instrução DML Gatilho de O bloco PL/SQL que é associado com uma Componentes do Oracle aplicação evento de aplicação e que é acionado Developer — por exemplo, automaticamente Forms Introdução ao Oracle: SQL e PL/SQL 16-10
  • 63. Uso de Variáveis Usar variáveis para: • Armazenamento temporário de dados • Manipulação de valores armazenados • Reutilização • Facilidade de manutenção 16-11 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Uso de Variáveis Com o código PL/SQL, você poderá declarar variáveis e depois usá-las em instruções procedurais e SQL onde uma expressão possa ser usada. • Armazenamento temporário de dados Os dados podem ser armazenados temporariamente em uma ou mais variáveis para uso quando na validação da entrada de dados para processamento posterior no processo de fluxo de dados. • Manipulação de valores armazenados As variáveis podem ser usadas para cálculo e manipulação de outros dados sem acessar o banco de dados. • Reutilização Quando declaradas, as variáveis podem ser usadas repetidamente em uma aplicação simplesmente referenciando-as em outras instruções, incluindo outras instruções declarativas. • De fácil manutenção Ao usar %TYPE e %ROWTYPE (mais informações sobre %ROWTYPE são abordadas em uma lição subseqüente), você declara variáveis, baseando as declarações nas definições das colunas de banco de dados. As variáveis PL/SQL ou variáveis de cursor anteriormente declaradas no escopo atual poderão usar também os atributos %TYPE e %ROWTYPE como especificadores de tipos de dados. Se uma definição subjacente for alterada, a declaração de variável se altera de acordo durante a execução. Isso permite a independência dos dados, reduz custos de manutenção e permite que os programas se adaptem, conforme o banco de dados for alterado, para atender às novas necessidades comerciais. Introdução ao Oracle: SQL e PL/SQL 16-11
  • 64. Tratando Variáveis em PL/SQL • Declarar e inicializar as variáveis na seção de declaração. • Atribuir novos valores às variáveis na seção executável. • Passar valores aos blocos PL/SQL através de parâmetros. • Ver os resultados pelas variáveis de saída. 16-12 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Tratando Variáveis em PL/SQL • Declarar e inicializar as variáveis na seção de declaração. Você poderá declarar variáveis na parte declarativa de qualquer subprograma, pacote ou bloco PL/SQL. As declarações alocam espaço de armazenamento para um valor, especificam seus tipos de dados e nomeiam a localização de armazenamento para que você possa referenciá- los. As declarações poderão também atribuir um valor inicial e impor a restrição NOT NULL. • Atribuir novos valores às variáveis na seção executável. – O valor existente da variável é substituído pelo novo. – Não são permitidas referências posteriores. Você deve declarar um variável antes de referenciá-la em outras instruções, incluindo outras instruções declarativas. • Passar valores aos subprogramas PL/SQL através de parâmetros. Há três modos de parâmetros, IN (o default), OUT e IN OUT. Você deve usar o parâmetro IN para passar valores aos subprogramas que estão sendo chamados. Você deve usar o parâmetro OUT para retornar valores ao chamador de um subprograma. E você deve usar o parâmetro IN OUT para passar valores iniciais ao subprograma que está sendo chamado e para retornar valores ao chamador. Os parâmetros dos subprogramas IN e OUT são abordados em outro curso. • Ver os resultados em um bloco PL/SQL através de variáveis de saída. Você poderá usar variáveis de referências para a entrada ou saída em instruções de manipulação de dados SQL. Introdução ao Oracle: SQL e PL/SQL 16-12
  • 65. Tipos de Variáveis • Variáveis PL/SQL: – Escalar – Composta – Referência – LOB (objetos grandes) • Variáveis Não-PL/SQL: Variáveis de ligação e de host 16-13 Copyright  Oracle Corporation, 1999. Todos os direitos reservados. Todas as variáveis PL/SQL têm um tipo de dados, o qual especifica um formato de armazenamento, restrições e uma faixa válida de valores. A linguagem PL/SQL suporta quatro categorias de tipos de dados — escalar, composta, referencial e LOB (objeto grande) — que você pode usar para declarar variáveis, constantes e indicadores. • Os tipos de dados escalares armazenam um único valor. Os principais tipos de dados são aqueles que correspondem aos tipos de coluna nas tabelas do Oracle Server; a linguagem PL/SQL também suporta variáveis booleanas. • Os tipos de dados compostos como, por exemplo, os registros, permitem que os grupos de campos sejam definidos e manipulados nos blocos PL/SQL. Os tipos de dados compostos são mencionados apenas brevemente neste curso. • Os tipos de dados referenciais armazenam valores, chamados de indicadores, que designam outros itens de programa. Os tipos de dados referenciais não são abordados neste curso. • Os tipos de dados LOB armazenam valores, chamados de endereços, que especificam a localização de objetos grandes (imagens gráficas, por exemplo) que são armazenadas fora de linha. Os tipos de dados LOB são abordados apenas brevemente neste curso. As variáveis não-PL/SQL incluem variáveis da linguagem de host declaradas em programas do pré- compilador, campos de tela nas aplicações Forms e variáveis de host SQL*Plus. Para obter mais informações sobre os LOBs, consulte o PL/SQL User’s Guide and Reference, Release 8, "Fundamentals". Introdução ao Oracle: SQL e PL/SQL 16-13